[RESOLU] Parcours d'un tableau avec foreach

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

23 nov. 2015, 21:02

Bonjour,

Ah, qu'il est dur de s'y remettre quand on n'a pas codé depuis longtemps...

Je souhaite parcourir un tableau que j'ai rempli avec le résultat d'une requête.
Pour une raison qui n'apparaît pas dans l'extrait de code que je vous donne ci-dessous,
je ne peux trier les résultats au moyen d'un ORDER BY dans la requête SQL,
ce qui aurait été tellement plus simple ! :(

Je stocke donc les résultats dans un tableau.
Je trie le tableau.
Et au moment de constituer une liste avec les résultats de ce tableau - à présent ordonné - ça merdoie.

Voyez-vous où j'ai fait une boulette ?
Merci,
<ul>
<?php
$sql = 'SELECT   per_id, per_nom, per_prenom
        FROM     per_personnes';
$res = mysqli_query($dbase, $sql) or die(mysqli_error($dbase));

// Construction d'un tableau pour stocker les résultats
$tab = array('id','identite');
while($ligne=mysqli_fetch_assoc($res))
	 { extract($ligne);
	   $tab['id'][] = $per_id;
	   $tab['identite'][] = mb_strtoupper($per_nom,'UTF-8').' '.$per_prenom;
	 }

// Tri du tableau selon le champ 'identite'
asort($tab['identite']);

// vérifications
print_r($tab);
var_dump($tab);

// affichage de la liste ordonnée
foreach($tab as list($id,$identite))
       { echo '<li><a href="fiche-'.$id.'.htm">'.$identite.'</a></li>';
       }
?>
</ul>

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

23 nov. 2015, 22:13

Sur un conseil - avisé - donné en parallèle (Merci, calimero !), ;)
j'ai changé la structure de mon tableau qui était effectivement erronée.

Voic les modifications apportées :
<ul>
<?php
$sql = 'SELECT   per_id, per_nom, per_prenom
        FROM     per_personnes';
$res = mysqli_query($dbase, $sql) or die(mysqli_error($dbase));

// Construction d'un tableau pour stocker les résultats
while($ligne=mysqli_fetch_assoc($res))
	 { extract($ligne);
	   $identite = mb_strtoupper($per_nom,'UTF-8').' '.$per_prenom;
	   $tab[] = array('id' => $per_id,
                    'identite' => $identite);
	 }

// Tri du tableau selon le champ 'identite'
asort($tab['identite']);

// vérifications
print_r($tab);
var_dump($tab);

// affichage de la liste ordonnée
foreach($tab as $tab_row)
       { echo '<li><a href="fiche-'.$tab_row['id'].'.htm">'.$tab_row['identite'].'</a></li>';
       }
?>
</ul>
Le remplissage se fait bien.
Le foreach fonctionne.
En revanche, le tri ne se fait plus ! :(

Je vérifie mes paramètres...

Mammouth du PHP | 2703 Messages

23 nov. 2015, 22:24


Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

23 nov. 2015, 22:26

Voici la solution !
<ul>
<?php
$sql = 'SELECT   per_id, per_nom, per_prenom
        FROM     per_personnes';
$res = mysqli_query($dbase, $sql) or die(mysqli_error($dbase));

// Construction d'un tableau pour stocker les résultats
$tab = array();
while($ligne=mysqli_fetch_assoc($res))
	 { extract($ligne);
	   $identite = mb_strtoupper($per_nom,'UTF-8').' '.$per_prenom;
	   $tab[$per_id] = $identite;
	 }

// Tri du tableau selon le champ 'identite' (implicite)
asort($tab);

// affichage de la liste ordonnée
foreach($tab as $key=>$value)
       { echo '<li><a href="fiche-'.$key.'.htm">'.$value.'</a></li>';
       }
?>
</ul>
Je me suis bien compliqué la vie pour pas grand-chose. :oops: :evil:

Merci à calimero pour son aide précieuse et efficace ! :love4:

ViPHP
ViPHP | 928 Messages

24 nov. 2015, 01:24

Sinon directement en SQL :
SELECT   per_id, per_nom, per_prenom
FROM     per_personnes
ORDER BY UPPER(per_nom), per_prenom

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

24 nov. 2015, 23:36

Je souhaite parcourir un tableau que j'ai rempli avec le résultat d'une requête.
Pour une raison qui n'apparaît pas dans l'extrait de code que je vous donne ci-dessous,
je ne peux trier les résultats au moyen d'un ORDER BY dans la requête SQL,
ce qui aurait été tellement plus simple ! :(
;)

ViPHP
ViPHP | 928 Messages

26 nov. 2015, 11:23

Désolé, je plaide coupable, je n'avais pas tout lu :oops: