[RESOLU] Foreach sur tableau à 2 dimensions

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Foreach sur tableau à 2 dimensions

Re: Foreach sur tableau à 2 dimensions

par albat » 06 déc. 2015, 18:48

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 ! ;)

Re: Foreach sur tableau à 2 dimensions

par @rthur » 02 déc. 2015, 23:16

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

par albat » 02 déc. 2015, 12:01

Forts, vous êtes. ;)

Merci !!!

Re: Foreach sur tableau à 2 dimensions

par Spols » 02 déc. 2015, 10:40

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

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

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

par albat » 02 déc. 2015, 10:00

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

par @rthur » 02 déc. 2015, 09:52

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

par albat » 02 déc. 2015, 07:12

C'est pourtant la même chose que ça, non ?
http://stackoverflow.com/questions/1099 ... reach-loop

Foreach sur tableau à 2 dimensions

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

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"
		}