73 votes

Comment démarrer une boucle foreach à un index spécifique en PHP

J'écris un foreach qui ne commence pas au 0ème index mais commence à la place au premier index de mon tableau. Existe-t-il un moyen de compenser le point de départ de la boucle?

112voto

TRiG Points 3339

Rester simple.

 foreach ($arr as $k => $v) {
   if ($k < 1) continue;
   // your code here.
}
 

36voto

Gordon Points 156415

Un Foreach de réinitialiser le tableau:

Remarque: Lorsque foreach première commence à s'exécuter, l'interne pointeur sur le tableau est automatiquement remise à zéro pour le premier élément du tableau. Cela signifie que vous n'avez pas besoin d'appeler reset() avant d'une boucle foreach.

Soit utiliser un for boucle (seulement si ce n'est pas un tableau associatif).

$letters = range('a','z');
for($offset=1; $offset < count($letters); $offset++) {
    echo $letters[$offset];
}

ou un while boucle (peut être un tableau)

$letters = range('a','z');
next($letters);
while($letter = each($letters)) {
    echo $letter['value'];
}

ou avec un LimitIterator

$letters = new LimitIterator(new ArrayIterator(range('a','z')), 1);
foreach($letters as $letter) {
    echo $letter;
}

qui vous permet de spécifier le décalage de début et de compter par le constructeur.

Tous les ci-dessus affiche les lettres de b à z au lieu de a à z

22voto

Cristian Points 92147

Vous pouvez utiliser la fonction array_slice :

 $arr = array(); // your array
foreach(array_slice($arr, 1) as $foo){
   // do what ever you want here
}
 

Bien sûr, vous pouvez utiliser la valeur de décalage que vous souhaitez. Dans ce cas, 1 'saute' le premier élément du tableau.

3voto

Kau-Boy Points 5512

Dans un foreach tu ne peux pas faire cela. Il y a seulement deux façons d'obtenir ce que vous voulez:

  1. Utiliser une boucle for et de commencer à la position 1
  2. utiliser un foreach et utiliser quelque chose comme si($key>0) autour de votre code

Un foreach fait ce que son nom vous dit. Faire quelque chose pour chaque élément :)

EDIT: OK, très mal, la solution vint à mon esprit. Essayez les solutions suivantes:

foreach(array_reverse(array_pop(array_reverse($array))) as $key => $value){
    ...
}

Qui permettrait d'inverser la matrice, de sortir le dernier élément et l'inverser à nouveau. Que vous aurez un élément à l'exclusion de la première.

Mais je vous recommande d'utiliser l'une des autres solutions. Le mieux serait de la première.

Et une variante: Vous pouvez utiliser array_slice() pour qui:

foreach(array_slice($array, 1, null, true) as $key => $value){
    ...
} 

Mais vous devez utiliser tous les trois paramètres pour garder les clés du tableau pour votre boucle foreach:

1voto

Swish Points 705

On dirait qu'une boucle for serait la meilleure façon d'aller ici, mais si vous pensez que vous DEVEZ utiliser foreach, vous pouvez déplacer le premier élément du tableau et le rétrograder:

 $a = array('foo','bar');
$temp = array_shift($a);
foreach ( $a as $k => $v ) {
  //do something
}
array_unshift($a, $temp);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X