Ceci permet d'utiliser à bon escient les valeurs de retour des fonctions fetch_* !(je ne supporte d'ailleurs pas de voir des codes avec un if() qui récupère le résultat d'une requête, suivi d'un do/while sur la même condition, alors que le while évite cette redondance).
Ben les valeurs de retour, y en a que deux : soit un tableau lorsqu'il y a des résultats, soit FALSE en cas d'erreur ou s'il n'y a pas de résultats. Que je le teste avec un if() ou avec un while() ne fait pas une grande différence : si c'est faux, je rentre pas dans ma structureCeci permet d'utiliser à bon escient les valeurs de retour des fonctions fetch_* !(je ne supporte d'ailleurs pas de voir des codes avec un if() qui récupère le résultat d'une requête, suivi d'un do/while sur la même condition, alors que le while évite cette redondance).
Théoriquement, cela doit donc aussi être le cas sur un x86, qui a l'instruction inc…Ca me fait penser à un débat similaire sur "est-ce que i++ est plus efficace que i = i + 1 ?"
La réponse est oui sur les ordinateurs PDP-11 (ordi sur lequel a été créé le langage C) car le processeur du PDP possède l'instruction d'autoincrémentation et non sur la plupart des autres ordinateurs.
Si l'on travaille encore sur des scripts PHP 3, passe encore ; mais, pourquoi utiliser la seconde boucle quand foreach fait le même travail en plus simple ?Enfin je n'utilise jamais le foreach qui n'existait pas avant PHP4 et qui peut être remplacé par while (list(...) = each).
Alors ça dépend après. Si je suis dans une optique MVC, alors cette boucle sera dans une fonction et un while() ça peut être cool pour faire le tableau.[...]
if ($machin = mysql_fetch_assoc($requete))
{
echo '<table>
<thead><tr><th>ID</th></thead>
<tbody>';
do
{
echo '<tr><td>'.$machin['id'].'</td></tr>';
} while($machin = mysql_fetch_assoc($requete));
echo '</tbody>
</table>';
}
else
{
echo '<p>Pas de résultat</p>';
}
Même dans une fonction en fait...
if ($machin = mysql_fetch_assoc($requete))
{
$return = array();
do
{
$return[] = $machin;
} while($machin = mysql_fetch_assoc($requete));
return $return;
}
else
{
return false;
}
Enfin bon, avec PDO, on a fetchAll() donc plus besoin de ce bazar
Étonnant que tu ne trouves pas ça plus lisible :if ($machin = mysql_fetch_assoc($requete)) { $return = array(); do { $return[] = $machin; } while($machin = mysql_fetch_assoc($requete)); return $return; } else { return false; }
$return = array();
while ($ligne = mysql_fetch_assoc($requete)) {
$return[] = $ligne;
}
return $return;
Car pourquoi renvoyer false s'il n'y a aucun résultat ? Rien ne le justifie, après tout :