在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;
}
}
所需的输出:这是我的数组
答案 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