1

当在 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;
    }
}

期望的输出:这是我的我的数组

4

2 回答 2

4

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

另请注意,循环prev内部可能在一个 PHP 版本中有效,但在其他版本中失败PHP 文档说foreach

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

我建议在您的情况下使用循环(while使用索引或each-函数)。该构造是程序员的直接信号,即迭代逻辑比数组元素上的顺序迭代更复杂。prevnextwhile

$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);
  }
}
于 2013-06-24T08:46:39.727 回答
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);
}

输出(另见此处):

this is my my array
于 2013-06-24T08:44:24.117 回答