9
votes

Limiter le nombre de fois qu'une boucle fonctionne dans PHP

J'ai une boucle foreach que j'ai besoin de limiter aux 10 premiers éléments puis de les sortir.

Comment ferais-je cela ici? p>

foreach ($butters->users->user as $user) {
    $id = $user->id;
    $name = $user->screen_name;
    $profimg = $user->profile_image_url;
    echo "things";    
} 


0 commentaires

7 Réponses :


2
votes

Utilisez un compteur de boucle et break code> lorsque vous souhaitez quitter. xxx pré>

sur la 10ème itération La boucle quittera à la fin. P> Il y a plusieurs variantes de cette question et une chose que vous devez choisir est de savoir si vous souhaitez exécuter la condition de boucle extérieure ou non. Considérez: P>

foreach (read_from_db() as $row) {
  ...  
}


2 commentaires

Typo là-bas, devrait être ($ i ++> 10)


Cela va casser la boucle foreach avec la première itération.



39
votes

Si vous souhaitez utiliser une variable supplémentaire, vous pouvez ajouter une variable supplémentaire pour contrôler le nombre d'itérations. Par exemple: xxx


2 commentaires

Il devrait être si ($ i == 10) et pas = 10.


Est-il capable d'ajouter quelque chose à ce sujet qui nous permettra ensuite de compter et de produire le nombre d'éléments laissés dans la liste qui n'ont pas été montrés? Comme au bas de echo "choses"; avoir quelque chose qui dit "et 4 de plus"?



1
votes

Si vous êtes sûr de vouloir garder la boucle foreach , ajoutez un compteur: xxx

Donc, chaque fois que votre boucle exécute, le compteur est incrémenté et Quand il atteint 10, la boucle est cassée de.

Vous pouvez être en mesure de retravailler la boucle foreach pour être un pour boucle, si possible.


0 commentaires

1
votes

Vous pouvez démarrer un comptoir avant votre blocage de votre blocage et vérifier contre elle dans la boucle et casser si le compteur est 10,

$count = 1;
foreach ($butters->users->user as $user) {
    if($count == 10)
       break;
    $id = $user->id;
    $name = $user->screen_name;
    $profimg = $user->profile_image_url;
    echo "things";
    $count++;
} 


0 commentaires

15
votes

Vous pouvez également utiliser limitatifiterator .

EG P>

$users = new ArrayIterator(range(1, 100)); // 100 test records
foreach(new LimitIterator($users, 0, 10) as $u) {
  echo $u, "\n";
}


0 commentaires

3
votes

Vous pouvez simplement itérer sur array_slice ($ buteters-> utilisateurs-> utilisateur, 0, 10) (les 10 premiers éléments).


0 commentaires

0
votes

J'aime vraiment la réponse de Volkerk, mais je ne comprends pas pourquoi il crée un nouvel itérateur lorsque vous aurez probablement une matrice existante. Je veux juste partager la façon dont j'ai fini par faire.

$arrayobject = new ArrayObject($existingArray);
$iterator = $arrayobject->getIterator();

foreach(new LimitIterator($iterator, 0, 10) as $key => $value) {
   // do something
}


0 commentaires