Remplir un tableau avec une boucle php

Résolu/Fermé
Signaler
Messages postés
3
Date d'inscription
jeudi 13 juillet 2017
Statut
Membre
Dernière intervention
17 juillet 2017
-
Messages postés
3
Date d'inscription
jeudi 13 juillet 2017
Statut
Membre
Dernière intervention
17 juillet 2017
-
Bonjour,

Je souhaite remplir un tableau de deux colonnes automatiquement grâce à une boucle.
Je galère un truc de fou.

Voici mon code :



public static function getListeCMS()
{
$sqlListeCMS = "SELECT `id_cms` FROM `cms`";
$ListeCMS = Db::getInstance()->ExecuteS($sqlListeCMS);//contient un tableau une colonne avec les ID cms
$monTableau = array('ID','Type');
$i=0;

foreach($ListeCMS as $ArticleCMS){
$type = '';

if(CMS::isCookBook($ArticleCMS)){//renvoie 1 ou 0
$type = 'CookBook';
}else{
if(CMS::isLookBook($ArticleCMS)){//renvoie 1 ou 0
$type = 'LookBook';
}
}
if ($type != ""){
$monTableau[$i]['ID'] = $ArticleCMS;
$monTableau[$i]['Type'] = $type;
$i++;
}
}
print_r($monTableau);
}


à la fin il devrait y avoir un tableau du genre

Colonne ID | colonne Type
------------------------------
1 | CookBook |
2 | LookBook |
3 | LookBook |
4 | LookBook |
12 | CookBook |
14 | CookBook |
21 | LookBook |
------------------------------

Merci pour votre aide, je vais criser lol !!!!



4 réponses

Messages postés
18298
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 janvier 2022
1 003
bonsoir, quelques suggestions pour ramer au lieu de galérer:
- lire ceci: https://www.php.net/manual/fr/function.array.php
- décrire ce qu'affiche
print_r($monTableau);

- avant le foreach, ajouter
print_r($ListeCMS);

- avant
if ($type
, afficher le contenu de $ArticleCMS, de $i, de $type
2
Messages postés
34693
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2022
4 003
Bonjour,

Vu la structure du tableau attendu ... ce code
if ($type != ""){
     $monTableau[$i]['ID'] = $ArticleCMS;
     $monTableau[$i]['Type'] = $type;
     $i++;
    }

ne te donnera pas satisfaction en effet...


si $ArticleCMS est l' ID ...
Dans ce cas Essaye tout simplement :
if (!empty($type)){
  $monTableau[$ArticleCMS] = $type;
}



Ta fonction se résumant en quelques lignes (en utilisant l'écriture ternaire) :
public static function getListeCMS(){
  $sqlListeCMS = "SELECT `id_cms` FROM `cms`";
  $ListeCMS = Db::getInstance()->ExecuteS($sqlListeCMS);//contient un tableau une colonne avec les ID cms
  $monTableau = array('ID','Type');
   
  foreach($ListeCMS as $ArticleCMS){   
    $type = CMS::isCookBook($ArticleCMS) ? 'CookBook' : (CMS::isLookBook($ArticleCMS) ? 'LookBook' : "");
    if (!empty($type)){
     $monTableau[$ArticleCMS] = $type;
    }
  }
  print_r($monTableau);
  return $monTableau;
}

1
Messages postés
3
Date d'inscription
jeudi 13 juillet 2017
Statut
Membre
Dernière intervention
17 juillet 2017

Merci à tous !!
J'ai fait ce qui est noté dans les exemples jordane45 que j'ai adapté et tout fonctionne.

Le contenu de mon tableau est donc celui ci :


Array ( [0] => ID [1] => Type [64] => CookBook [70] => LookBook [71] => LookBook [72] => LookBook [73] => LookBook [75] => LookBook [76] => LookBook [77] => LookBook [78] => LookBook [79] => LookBook [81] => LookBook [82] => CookBook [83] => CookBook [84] => CookBook [85] => CookBook [86] => CookBook [106] => CookBook [120] => CookBook [121] => CookBook [122] => CookBook [123] => CookBook [124] => CookBook [125] => CookBook [128] => CookBook [129] => CookBook [131] => LookBook [134] => CookBook [135] => CookBook [136] => LookBook [137] => CookBook [138] => LookBook [141] => CookBook [142] => LookBook [143] => CookBook [144] => CookBook [145] => LookBook [146] => CookBook [147] => CookBook [148] => CookBook [149] => CookBook [150] => LookBook [151] => LookBook [152] => LookBook [153] => CookBook [156] => LookBook [160] => CookBook [161] => LookBook [163] => LookBook [164] => LookBook [165] => CookBook [166] => CookBook [167] => CookBook [168] => CookBook [169] => LookBook [170] => LookBook [171] => LookBook [172] => CookBook [173] => LookBook [174] => CookBook [175] => CookBook [176] => CookBook [177] => LookBook [178] => LookBook [179] => CookBook [180] => LookBook [181] => CookBook [182] => CookBook [184] => CookBook [186] => LookBook [187] => LookBook [188] => LookBook [191] => LookBook [192] => CookBook [193] => CookBook [194] => CookBook [195] => CookBook [196] => LookBook [197] => CookBook [198] => CookBook [199] => LookBook [200] => CookBook [201] => CookBook [202] => LookBook [203] => LookBook [204] => LookBook [207] => LookBook [208] => LookBook [209] => CookBook [210] => LookBook [211] => CookBook [213] => LookBook [214] => CookBook [215] => LookBook [216] => LookBook [217] => CookBook [218] => LookBook [220] => LookBook [221] => CookBook [222] => LookBook [223] => LookBook [224] => CookBook [225] => LookBook [226] => LookBook [227] => LookBook [228] => CookBook [229] => LookBook [230] => CookBook [231] => LookBook [232] => LookBook [233] => CookBook [235] => CookBook [236] => CookBook [237] => CookBook [238] => CookBook [239] => LookBook [240] => LookBook [241] => CookBook [242] => LookBook [243] => LookBook [244] => CookBook [245] => LookBook [251] => LookBook [252] => LookBook [253] => CookBook )




Je souhaite faire maintenant une fonction qui va faire appel à ce tableau...
je comptais faire ceci :


public static function affichageInspiration(){
$data = CMS::getListeCMS();
//print_r($data);
foreach($data as $ligne){
echo($ligne['ID']."<br />");

}
}


Pour simplement afficher tous les IDs contenu dans le tableau mais je prends pleins d'erreurs. Normal car je me rends compte que 'ID' n'est pas le nom de la colonne. En fait il n'y a tout simplement pas d’entête.
Si je fais

echo $data[253];

Il va me retourner "CookBook". Ok mais pour qu'il le retourne il faut que je connaisse l'ID.

Comment du coup puis-je faire pour afficher les données afin que je puisse les utiliser ??
Car à la base plutot que d'enregistrer l'ID dans le tableau on a enregistré la position...

Comment puis-je m'en sortir ?

Merci beaucoup !
0
Messages postés
18298
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 janvier 2022
1 003
peut-être ainsi:

public static function affichageInspiration(){
   $data = CMS::getListeCMS();
   //print_r($data);
   foreach($data as $id=>$ligne){
    echo($id."<br />");

   }
  }
0
Messages postés
3
Date d'inscription
jeudi 13 juillet 2017
Statut
Membre
Dernière intervention
17 juillet 2017

Alors grâce à vous et aux documentations trouvées ici et là...

voici mon code qui fonctionne à merveille !

Pour remplir mon tableau à deux colonnes :

foreach($ListeCMS as $ArticleCMS){
$type = CMS::isCookBook($ArticleCMS['id_cms']) ? 'CookBook' : (CMS::isLookBook($ArticleCMS['id_cms']) ? 'LookBook' : "");
if (!empty($type)){
$monTableau[$ArticleCMS['id_cms']] = $type;
array_push($seb, array("ID"=>$ArticleCMS['id_cms'],"Type"=>$type));
}
}
print_r($seb);
echo"<br /><br /><br />";
return $seb;
}



Et pour afficher le tableau et le parcourir

public static function affichageInspiration(){
$data = CMS::getListeCMS();

echo"<br /><br /><br />";
foreach($data as $ligne){
echo('ID : '.$ligne['ID'].' Type: '.$ligne['Type'].'<br />');
}
}


Merci les collègues !
0