在foreach循环中再次运行当前索引

时间:2013-06-24 08:38:13

标签: php arrays foreach

在foreach循环中遇到某个条件时,是否可以再次运行当前索引?在下面发布一个例子。

$array = array('this', 'is', 'my', 'array');
$bool = false;
foreach($array as $value){
    echo $value.' ';
    if($value == 'my' && !$bool){
        // Rerun the 'my' index again
        $bool = true;
    }
}

所需的输出:这是我的数组

2 个答案:

答案 0 :(得分:3)

即使可能可能(通过prev或其他一些黑客),以这种方式编写的代码很难理解(即使是在几年内你自己)。对于程序员来说,foreach构造(乍一看)看起来像是对数组的所有元素的简单迭代,而不是来回跳跃。

另请注意,prev循环中的foreach可能在一个PHP版本中有效,但在其他版本中失败PHP docs say

  

由于foreach依赖内部数组指针在循环中更改它可能会导致意外行为

我建议您使用while循环(使用索引或each - prev - next函数)。 while构造是程序员的直接信号,迭代逻辑比仅仅对数组元素的顺序迭代更复杂。

$array = array('this', 'is', 'my', 'array');
$bool = false;

while (list($key, $value) = each($array))  
{
  echo $value.' ';
  if($value == 'my' && !$bool)
  {
    // Rerun the 'my' index again
    $bool = true;
    prev($array);
  }
}

答案 1 :(得分:2)

另一种变体:

<?php
$array = array('this', 'is', 'my', 'array');
$bool = false;

foreach ($array as $value) {
    do {
        echo $value.' ';

        if($value == 'my' && !$bool){
            // Rerun the 'my' index again
            $bool = true;
        } else {
            $bool = false;
        }
    } while ($bool);
}

输出(also see here):

this is my my array