Bonjour à tous,
Comment remplacer le while par un foreach ?Code:
1
2
3
4
5
6 $Resultat = mysql_query('SELECT date, hipo FROM recup_t ORDER BY date , hipo'); while ($row=mysql_fetch_array($Resultat)) { ... }
Je suis en PHP 4
Version imprimable
Bonjour à tous,
Comment remplacer le while par un foreach ?Code:
1
2
3
4
5
6 $Resultat = mysql_query('SELECT date, hipo FROM recup_t ORDER BY date , hipo'); while ($row=mysql_fetch_array($Resultat)) { ... }
Je suis en PHP 4
Bonjour,
Le foreach est dans le While car à chaque lecture, $row est un tableau ...
Code:
1
2
3
4
5
6 while ($row=mysql_fetch_array($Resultat)) { foreach ($row as $value) ... }
Bonsoir Fench,
je croyais que le foreach était plus rapide que le while !
Bonsoir,
non ce n'est pas ce qu'il veut dire. En fait mysql_fetch_array renvoie un seul tableau, contenant, pour chaque occurence, une colonne de l'une ligne de ta base de données. À chaque fois que le contenu du while est executé, mysql_fetch_array renvoie l'enregistrement suivant.
Tout çà pour dire que, comme l'explique Fench, lorsque tu fais un foreach sur le résultat de mysql_fetch_array, tu parcours les colonnes d'une ligne renvoyées par ton jeu de résultat.
Si tu souhaites enregistrer tes lignes dans un tableau pour les réexploiter ensuite, tu peux faire ceci :
Code:
1
2
3
4
5
6
7
8
9 function get_records(){ $recordset = array(); $q = mysql_query('SELECT * FROM matable'); while($r = mysql_fetch_array($q)){ $recordset[] = $r; } return $recordset; }
Code:
1
2
3
4
5
6
7 $records = get_records(); foreach($records as $k => $v){ echo $k. ' : '.$v.'<br/>'; } echo count($records);
Bonjour ThomasR,
la ligne : echo $k. ' : '.$v.'<br/>';
M'affiche pour $k l'incrémentation
Mais le $v m'affiche : array
Par contre le : echo count($records);
Me retourne bien le nombre d'occurences.
Si tu peut y jetter un oeil.
Ca affiche array car la valeur contient un tableau dont chaque occurence est une colonne :
J'aurais dû écrire ceci :
Code:
1
2
3
4
5
6
7 $records = get_records(); foreach($records as $k => $v){ echo $k. ' : '.implode(', ', $v).'<br/>'; } echo count($records) . ' enregistrements';
Ok, cela tourne.
J'ai remplacé : $q = mysql_query('SELECT * FROM matable');
Par : $q = mysql_query('SELECT DISTINCT che FROM recup_t');
Le DISTINCT n'a pas l'air de fonctionner car j'ai les doublons !
Bonjour à tous.
Avec du retard, je vous remercie pour vos conseils.
@ +