PHP Foreach循环从循环内向前迈出了一步

时间:2010-07-18 09:51:15

标签: php foreach

基本上我在PHP中有一个foreach循环,我想:

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

6 个答案:

答案 0 :(得分:7)

foreach中进行操作是不切实际的。

对于非关联数组,请使用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

 }

对于关联数组,它有点棘手。这应该有效:

$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

 }

访问下一个元素时,请确保它们存在!

答案 1 :(得分:1)

使用continue关键字跳过此循环的其余部分并跳回到开头。

答案 2 :(得分:1)

不确定你是否只想用第一个元素做“一些东西”,只用最后一个元素做“更多的东西”,并且每个其他元素都要做“一些东西”和“更多东西”。或者如果你想用第一,第三,第五元素做“某些东西”,用第二,第四,第六元素做“更多东西”等。

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

答案 3 :(得分:1)

好的,继续我对Pekka解决方案的评论,这里考虑到数组可能是关联的事实。它不漂亮,但它的工作原理。欢迎提出如何改善这一点的建议!

<?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
        }
     }
?>

答案 4 :(得分:0)

尝试类似......

for ($i=0, $i<count($x); $i++)
{
    // do stuff with $x[$i]
    // do stuff with $x[$i+1], unless you're on the last element of the array
}

答案 5 :(得分:0)

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