est-ce que mon script est bon ?? (foreach)

  • Auteur de la discussion Auteur de la discussion medium69
  • Date de début Date de début
WRInaute passionné
Je cherche à ce que la boucle se fasse seulement x fois ; par exemple 5 fois.

est-ce le bon code ?

Code:
foreach($racine -> item as $element) {
 
$nb++;
  
$title = utf8_decode((string)$element->title); 
$uri = utf8_decode((string)$element->link); 
$desc = utf8_decode((string)$element->description);
$date = utf8_decode((string)$element->pubDate);

echo '<p>'.$title.'</p>';
echo '<p>'.$uri.'</p>';
echo '<p>'.$desc.'</p>';
echo '<p>'.$date.'</p>';

 if ($nb == 5) break;
 }
 
WRInaute discret
Oui, il faut juste que tu penses à initialiser ta variable $nb à 1 en dehors de ta boucle.
Code:
$nb = 1;
foreach($racine -> item as $element) {
 
$nb++;
  
$title = utf8_decode((string)$element->title); 
$uri = utf8_decode((string)$element->link); 
$desc = utf8_decode((string)$element->description);
$date = utf8_decode((string)$element->pubDate);

echo '<p>'.$title.'</p>';
echo '<p>'.$uri.'</p>';
echo '<p>'.$desc.'</p>';
echo '<p>'.$date.'</p>';

 if ($nb == 5) break;
 }
 
WRInaute passionné
Merci pour la réponse, mais la variable doit être initialisé à 0 ; Si elle est à 1 je vais boucler une fois de trop.

Merci de la confirmation
 
WRInaute occasionnel
medium69 a dit:
... mais la variable doit être initialisé à 0 ; ...
Exact.

Et si on pousse le vice, tu peux viré le "$nb++;" situé après le foreach
Et modifier "if ($nb == 5) break;" par :
Code:
...
if ($nb++ == 5) break;
...
Si $nb est initialisé 1
Ou
Code:
...
if (++$nb == 5) break;
...
Si $nb est initialisé 0

Mais là je chippote :D
 
WRInaute impliqué
j'ai entendu dire qu'utiliser des while au lieu des for et foreach était plus rapide. c'est vrai ?
 
WRInaute passionné
magic corp. a dit:
medium69 a dit:
... mais la variable doit être initialisé à 0 ; ...
Exact.

Et si on pousse le vice, tu peux viré le "$nb++;" situé après le foreach
Et modifier "if ($nb == 5) break;" par :
Code:
...
if ($nb++ == 5) break;
...
Si $nb est initialisé 1
Ou
Code:
...
if (++$nb == 5) break;
...
Si $nb est initialisé 0

Mais là je chippote :D

Tu sais je recode de manière beaucoup plus fine...

Je vais adoprté ta dernière solution.
 
WRInaute accro
medium69 pourquoi employer un foreach et non pas un for ou un while ?
bon c'est du chipotage, ça reviendra plus ou moins au même, mais disons que c'est plus adapté à ta situation.
 
WRInaute passionné
thierry8 a dit:
medium69 pourquoi employer un foreach et non pas un for ou un while ?
bon c'est du chipotage, ça reviendra plus ou moins au même, mais disons que c'est plus adapté à ta situation.

Tu as sans doute raison...

Je vais voir cela
 
WRInaute discret
Ton truc est surtout plus pratique si $racine peut avoir moins de 5 élements (et si ton script fonctionne c'est du chipotage de toutes facons ;))
 
Discussions similaires
Haut