Imaginons qu'on part de rien:
quand ta boucle future est terminée, qu'est-ce qui est vrai ?
quand
$id == $valeur (condition de sortie)
par conséquent la condition de continuation du while, et non pas de sortie comme dit la majorité de la littérature) est le contraire:(1)
while (
$id != $valeur)
{
}
mais pour que ça fonctionne il faut avoir une valeur pour $valeur avant le while:
ça donne en finale un truc qui ressemble à ça:
<?PHP
$friends = array("toto", "titi", "fantomas", "diabolus");
$valeur =$friends[0];
$id = "fantomas";
while ($id != $valeur)
{
$valeur = next ($friends);
}
print "$valeur";
?>
qui va se planter avec allégresse si on cherche un $id inexistant: création d'une boucle infinie et temps alloué dépassé très normalement.
D'où, plus rigoureux et plus sûr:
<?PHP
$friends = array("toto", "titi", "fantomas", "diabolus");
$valeur =$friends[0];
$id = "fantomas";
$trouve = ($valeur == $id);
while ((!$trouve) and ($valeur = next ($friends)))
{
$trouve = ($valeur == $id);
}
if ($trouve)
{
print "$valeur";
}
else
{
print "absent";
}
?>
(1) Il est souvent plus simple, surtout quand les conditions sont compliquées, de partir de la situation finale souhaitée, et d'en déduire le contraire qui est la condition de continuation du while, en appliquant la loi de De Morgan appliquée couramment par les spécialistes des automatismes:
NON (A et B) <==> (Non A ou Non B)
NOn (A ou B) <==> (Non A et Non B)
plus simple à comprendre et à appliquer si l'expression est complètement paranthésée...
Au passage, il faut réserver break aux switch. Il faut toujours avoir un seul point de sortie d'une boucle. (cf Knuth, Dijkstra and alii...)