Page 1 sur 1

Foreach sur tableau à 2 dimensions

Posté : 02 déc. 2015, 07:10
par albat
Bonjour,

Alors, là, je ne comprends plus.
Je crée un tableau à deux dimensions, je le remplis au moyen d'une requête SQL et quand je veux le lire, ça merdoie.
J'ai beau me relire, je vois pas le schmurtz...
$tab = array();
$sql = "SELECT membre_id, membre_nom, membre_age
        FROM   membres
        WHERE  membre_actif = 1";
$res = mysqli_query($dbase, $sql) or die(mysqli_error($dbase));
while($ligne=mysqli_fetch_assoc($res))
     { extract($ligne);
	     $tab['nom'][$membre_id] = $membre_nom;
       $tab['age'][$membre_id] = $membre_age;
     }
var_dump($tab); // JUSQU'ICI, TOUT VA BIEN
foreach($tab as $key=>$val)
		{ echo '<li>membre n°'.$key.' - nom : '.$val['nom'].' - âge : '.$val['age'].'</li>'; // LÀ, J'AI UN "UNDEFINED INDEX"
		}

Re: Foreach sur tableau à 2 dimensions

Posté : 02 déc. 2015, 07:12
par albat
C'est pourtant la même chose que ça, non ?
http://stackoverflow.com/questions/1099 ... reach-loop

Re: Foreach sur tableau à 2 dimensions

Posté : 02 déc. 2015, 09:52
par @rthur
foreach($tab ...
$tab ne contient que 2 éléments ['nom'] et ['age']
Et c'est $tab['nom'] qui contient tous les éléments de nom sur lequel tu veux probablement boucler...

La solution la + simple, c'est d'affecter tes valeurs comme cela :
$tab[$membre_id]['nom'] = $membre_nom;
       $tab[$membre_id]['age'] = $membre_age;
Ainsi $tab contiendra tous tes membres et pour chacun tu pourras récupérer facilement le nom et l'age

Re: Foreach sur tableau à 2 dimensions

Posté : 02 déc. 2015, 10:00
par albat
J'ai essayé d'inverser l'orientation du tableau.
Cela me paraît en effet plus logique et Calimero m'avait également précédemment conseillé de le faire.

Le hic, c'est que j'effectue un tri de ce tableau sur la "colonne" $tab['nom']
Je ne l'ai pas inclus dans l'extrait de code communiqué ci-dessus.
Vioc la version complétée.
$tab = array();
$sql = "SELECT membre_id, membre_nom, membre_age
        FROM   membres
        WHERE  membre_actif = 1";
$res = mysqli_query($dbase, $sql) or die(mysqli_error($dbase));
while($ligne=mysqli_fetch_assoc($res))
     { extract($ligne);
       $tab['nom'][$membre_id] = $membre_nom;
       $tab['age'][$membre_id] = $membre_age;
     }
uasort($tab['nom'], 'compare_sansaccent');
var_dump($tab); // JUSQU'ICI, TOUT VA BIEN
foreach($tab as $key=>$val)
    { echo '<li>membre n°'.$key.' - nom : '.$val['nom'].' - âge : '.$val['age'].'</li>'; // LÀ, J'AI UN "UNDEFINED INDEX"
    }
Si je construis mon tableau ainsi :
$tab[$membre_id]['nom'] = $membre_nom;
$tab[$membre_id]['age'] = $membre_age;
le tri sur le nom ne fonctionne plus.

Re: Foreach sur tableau à 2 dimensions

Posté : 02 déc. 2015, 10:26
par @rthur
Ah...

Bah il faut que tu boucles sur les noms alors :
foreach($tab['nom'] as $membre_id => $nom) { 
    echo '<li>membre n°'.$membre_id.' - nom : '.$nom.' - âge : '.$val['age'][$membre_id].'</li>';
}

Re: Foreach sur tableau à 2 dimensions

Posté : 02 déc. 2015, 10:40
par Spols
Ou tu peux mettre le nom comme index premier et enregistrer l'id dans le tableau
$tab[$membre_nom]['id'] = $membre_id;
$tab[$membre_nom]['age'] = $membre_age;
Cela aurai l'avantage de te passer de fonction de tri personaliser car tu peux aussi faire ceci :
$nom_sans_accent = remove_accent($membre_nom);
$tab[$nom_sans_accent]['id'] = $membre_id;
$tab[$nom_sans_accent]['nom'] = $membre_nom;
$tab[$nom_sans_accent]['age'] = $membre_age;
la fonction remove_accent comprends ton remplacement d'accent que tu as dans ta fonction de tri perso

Un simple ksort te suffit alors pour trier ton tableau.

Point de vue performance, c'est probablement mieux car tu ne remplace tout tes accents qu'une fois par nom

Re: Foreach sur tableau à 2 dimensions

Posté : 02 déc. 2015, 12:01
par albat
Forts, vous êtes. ;)

Merci !!!

Re: Foreach sur tableau à 2 dimensions

Posté : 02 déc. 2015, 23:16
par @rthur
Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton "Résolu" situé en haut de la page.


Rah lala ces admin... |(X

Re: Foreach sur tableau à 2 dimensions

Posté : 06 déc. 2015, 18:48
par albat
Pouvez répéter la question ?...

Modération :
Je te propose un petit jeu :
Oublie que tu es l'auteur de ce sujet et relis attentivement ta demande.

Si tu ne la comprends pas, ça prouve qu'il est nécessaire de la re-rédiger.
Si tu la comprends, profites-en pour la re-rédiger, parce que nous... on ne la comprend pas ! ;)