Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP循环多维数组_Php_Arrays_Loops_Multidimensional Array - Fatal编程技术网

PHP循环多维数组

PHP循环多维数组,php,arrays,loops,multidimensional-array,Php,Arrays,Loops,Multidimensional Array,不完全确定如何适当地命名这个问题,但它需要循环遍历嵌套在数组中的任何数组,其中也可能是任何其他数组的元素,等等。最初,我认为需要标记哪些数组还没有循环,哪些已经循环,然后完全循环“基本”数组(尽管据了解,这是不需要的,而且PHP以某种方式任意执行)。这个问题似乎有点奇怪——如果省略了用于测试未找到值的条件子句,则函数将找到嵌套在数组中任意位置的值,反之亦然。无论如何,函数如下所示: function loop($arr, $find) { for($i=0;$i<count($arr)

不完全确定如何适当地命名这个问题,但它需要循环遍历嵌套在数组中的任何数组,其中也可能是任何其他数组的元素,等等。最初,我认为需要标记哪些数组还没有循环,哪些已经循环,然后完全循环“基本”数组(尽管据了解,这是不需要的,而且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;
      }
    }
   }
 }
函数循环($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比的要快一点。请接受我的道歉。但是随着时间的推移,这个测试显示出不同的结果: