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?
Réponses
Trop de publicités?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
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.
Dans un foreach tu ne peux pas faire cela. Il y a seulement deux façons d'obtenir ce que vous voulez:
- Utiliser une boucle for et de commencer à la position 1
- 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:
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);