Foreach imbriqué et array()

jul33
Invité n'ayant pas de compte PHPfrance

12 sept. 2010, 10:51

Bonjour,

Je suis confronté à un problème d'affichage de tableau.
J'ai une table avec les éléments suivants :

Code : Tout sélectionner

id label description categorie
avec la requête suivante pour construire mon tableau (array()) :
		$sql = "SELECT * FROM table ORDER BY categorie ASC";
		$req = mysql_query($sql);
		$tab = array();
		while($data = mysql_fetch_assoc($req)){
			$tab[$data["categorie"]] = array();
			$tab[$data["categorie"]][] = $data;
		}
Le but étant d'afficher les "label" par catégorie.
Pour afficher j'utilise ceci :
			foreach($tab as $key => $value ) {
				echo 'Cet élément a pour clé "' . $key . '" et pour valeur "' . $value . '"<br />'; 
				foreach($value as $key => $n ) {
					echo 'Cet élément a pour clé "' . $key . '" et pour valeur "' . $n . '"<br />'; 
				}
			}
Les catégories sont bien affichées mais tous les "label" ne sont pas présent. Seul une ligne par catégorie est affichée.

Pourriez-vous m'aiguiller pour que cela fonctionne ?

D'avance merci.

Mammouth du PHP | 661 Messages

12 sept. 2010, 12:32

while($data = mysql_fetch_assoc($req)){
                        $tab[$data["categorie"]] = array();
                        $tab[$data["categorie"]][] = $data;
                }
Normal, tu réinitialises ton tableau à chaque ligne .... donc il ne contiens que la dernière ^^

jul33
Invité n'ayant pas de compte PHPfrance

12 sept. 2010, 12:54

Merci de m'avoir aidé.

J'ai corrigé comme ceci :
$i=0;
while($data = mysql_fetch_assoc($req)){
                        if($i==0){
                                $tab[$data["categorie"]] = array();
                        }
                        $tab[$data["categorie"]][] = $data;
                        $i++;
                }
Pourriez-vous me dire si ce code est correcte ?

Encore merci.

Mammouth du PHP | 661 Messages

12 sept. 2010, 17:23

Ce code ne semble pas faux, à moins qu'en vérifiant, il en soit autrement, mais dans tous les cas, il est fort probable qu'il ne soit pas optimisé !... il est à mon avis inutile de mettre un compteur juste pour ça !...

regardes du coté de if(empty() ) ou if(!is_array() ) qui à mon avis seront mieux ;)

ViPHP
ViPHP | 5462 Messages

12 sept. 2010, 17:55

même sans verif, ca le fait :wink: