PHP循环多维数组
不完全确定如何适当地命名这个问题,但它需要循环遍历嵌套在数组中的任何数组,其中也可能是任何其他数组的元素,等等。最初,我认为需要标记哪些数组还没有循环,哪些已经循环,然后完全循环“基本”数组(尽管据了解,这是不需要的,而且PHP以某种方式任意执行)。这个问题似乎有点奇怪——如果省略了用于测试未找到值的条件子句,则函数将找到嵌套在数组中任意位置的值,反之亦然。无论如何,函数如下所示:PHP循环多维数组,php,arrays,loops,multidimensional-array,Php,Arrays,Loops,Multidimensional Array,不完全确定如何适当地命名这个问题,但它需要循环遍历嵌套在数组中的任何数组,其中也可能是任何其他数组的元素,等等。最初,我认为需要标记哪些数组还没有循环,哪些已经循环,然后完全循环“基本”数组(尽管据了解,这是不需要的,而且PHP以某种方式任意执行)。这个问题似乎有点奇怪——如果省略了用于测试未找到值的条件子句,则函数将找到嵌套在数组中任意位置的值,反之亦然。无论如何,函数如下所示: function loop($arr, $find) { for($i=0;$i<count($arr)
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;
}
}
}
}
函数循环($arr,$find){
对于($i=0;$iloop($arr[$i],$find);
}否则{
打印“找不到$find”;
返回false;
}
}
}
}
试试这个:这对我来说已经有一段时间了
function array_search_key( $needle_key, $array ) {
foreach($array AS $key=>$value){
if($key == $needle_key) return $value;
if(is_array($value)){
if( ($result = array_search_key($needle_key,$value)) !== false)
return $result;
}
}
return false;
}
也许您应该将代码更改为:
var $found = false;
function loop($arr, $find) {
foreach($arr as $k=>$v){
if($find==$v){
$this->found = true;
}elseif(is_array($v)){
$this->loop($v, $find);
}
}
return $this->found;
}
好的,稍微修改一下怎么样:
function loop($arr, $find) {
for($i=0;$i<count($arr);$i++) {
if(is_array($arr[$i])) {
$this->loop($arr[$i], $find);
} else {
if($arr[$i] == $find) {
print "Found $find";
return true;
}
}
}
return false;
}
函数循环($arr,$find){
对于($i=0;$iloop($arr[$i],$find);
}否则{
如果($arr[$i]==$find){
打印“找到$find”;
返回true;
}
}
}
返回false;
}
嗯?请问问题是什么?@Tibor,使用
foreach
比使用for
慢,后者与小数组无关,但与多级数组(尤其是大数组)无关会有很好的速度差异…创建一个堆栈,保存父数组的位置,循环子数组,如果在子数组中遇到子数组,则将当前位置推到堆栈上并开始循环子数组,如果完成子数组,则弹出堆栈并继续循环父数组从你下船的那一刻起stack@shadyyx:真的有这么大的区别吗?我没有检查,但我一般不知道为什么会有。你对此有任何参考资料或进行过任何测试吗?@Tibor抱歉,我的错。我记错了。我在SE()阅读基准测试而且记错了-看来foreach比的要快一点。请接受我的道歉。但是随着时间的推移,这个测试显示出不同的结果: