【发布时间】:2012-05-13 23:04:29
【问题描述】:
不完全确定如何恰当地命名这个问题,但它需要遍历嵌套在数组中的任何数组,其中也可能是任何其他数组的元素 - 等等。最初,我认为需要标记哪些数组尚未循环,哪些数组已经循环,以完全循环“基础”数组(尽管了解到这不是必需的,而且 PHP 以某种方式任意执行此操作) .问题似乎有点奇怪——如果省略了用于测试是否未找到值的条件子句,则该函数将在任何地方找到嵌套在数组中的值,反之亦然。反正函数如下:
function loop($arr, $find) {
for($i=0;$i<count($arr);$i++) {
if($arr[$i] == $find) {
print "Found $find";
return true;
} else {
if(is_array($arr[$i])) {
$this->loop($arr[$i], $find);
} else {
print "Couldn't find $find";
return false;
}
}
}
}
【问题讨论】:
-
请问有什么问题?
-
@Tibor,使用
foreach比使用for慢,这与小数组无关,但对于多级数组(尤其是大数组)会有很好的速度差异...... -
创建一个栈来保存父数组的位置,循环遍历子数组,如果遇到子数组中的子元素,然后将当前位置压入堆栈并开始循环遍历孙子数组,toerhwsie if你完成了孩子然后弹出堆栈并从你离开堆栈的点继续循环通过父母
-
@shadyyx:真的有这样的区别吗?我没有检查,但我通常不明白为什么会有一个。您对此有任何参考或进行过任何测试吗?
-
@Tibor 对不起,我的错。我记错了。我在 SE (stackoverflow.com/questions/3430194/…) 阅读了一个基准测试并记错了 - 似乎
foreach甚至比for还要快一点。请接受我的道歉。但是随着时间的推移,这个测试显示出不同的结果:codepad.org/STW1Jd4j
标签: php arrays loops multidimensional-array