O loop PHP Foreach dá um passo adicional para dentro do loop

Basicamente eu tenho um loop foreach em PHP e quero:

foreach( $x as $y => $z ) // Do some stuff // Get the next values of y,z in the loop // Do some more stuff 

Não é prático fazer em um foreach .

Para arrays não associativos , use for :

 for ($x = 0; $x < count($y); $x++) { echo $y[$x]; // The current element if (array_key_exists($x+1, $y)) echo $y[$x+1]; // The next element if (array_key_exists($x+2, $y)) echo $y[$x+2]; // The element after next } 

Para arrays associativos , é um pouco mais complicado. Isso deve funcionar:

 $keys = array_keys($y); // Get all the keys of $y as an array for ($x = 0; $x < count($keys); $x++) { echo $y[$keys[$x]]; // The current element if (array_key_exists($x+1, $keys)) echo $y[$keys[$x+1]]; // The next element if (array_key_exists($x+2, $keys)) echo $y[$keys[$x+2]]; // The element after next } 

Ao acessar um dos próximos elementos, certifique-se de que eles existem!

use a palavra-chave continue para ignorar o resto deste loop e voltar ao início.

Não tenho certeza se você simplesmente quer fazer apenas “algumas coisas” com o primeiro elemento, apenas “mais algumas coisas” com o último elemento, e “coisas” e “algumas coisas mais” com todos os outros elementos. Ou se você quiser fazer “algumas coisas” com os primeiro, terceiro e quinto elementos, e “algumas coisas mais” com o segundo, o fouth, os sextos elementos, etc.

 $i = 0; foreach( $x as $y => $z ) if (($i % 2) == 0) { // Do some stuff } else { // Do some more stuff } $i++; } 

Ok, seguindo o meu comentário sobre a solução da Pekka, aqui é um que leva em conta o fato de que a matriz pode ser associativa. Não é bonito, mas funciona. Sugestões sobre como melhorar isso são bem-vindas!

 < ?php $y = array( '1'=>'Hello ', '3'=>'World ', '5'=>'Break? ', '9'=>'Yup. ' ); $keys = array_keys($y); $count = count($y); for ($i = 0; $i < $count; $i++) { // Current element $index = $keys[$i]; echo "Current: ".$y[$index]; // The current element if (array_key_exists($i+1, $keys)) { $index2 = $keys[$i+1]; echo "Next: ".$y[$index2]; // The next element } if (array_key_exists($i+2, $keys)) { $index3 = $keys[$i+2]; echo "Nextnext: ".$y[$index3]; // The element after next } } ?> 

tente algo como …

 for ($i=0, $i 
 reset($arr); while(list($firstindex,$firstvalue) = each($arr)){ list($secondindex,$secondvalue) = each($arr); //do something with first & second. }