[RESOLU] Parcours d'un tableau avec foreach

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] Parcours d'un tableau avec foreach

Re: [RESOLU] Parcours d'un tableau avec foreach

par Genova » 26 nov. 2015, 11:23

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

Re: Parcours d'un tableau avec foreach

par albat » 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 ! :(
;)

Re: [RESOLU] Parcours d'un tableau avec foreach

par Genova » 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

Re: Parcours d'un tableau avec foreach

par albat » 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:

Re: Parcours d'un tableau avec foreach

par or 1 » 23 nov. 2015, 22:24

Re: Parcours d'un tableau avec foreach

par albat » 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...

Parcours d'un tableau avec foreach

par albat » 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>