PHP中遍历多维数组的递归方法

PHP中遍历多维数组的递归方法,php,algorithm,arrays,traversal,Php,Algorithm,Arrays,Traversal,我需要一个方法来遍历PHP中的多维数组,而不使用函数调用本身 基本上我有这样一个数组: $data = array( 'hoge' => 123, 'foo' => 456, 'bar' => 789, 'aaa' => array( 'abc' => 111, 'bcd' => 222, 'cde' => 333 ), 'bbb' => array(

我需要一个方法来遍历PHP中的多维数组,而不使用函数调用本身

基本上我有这样一个数组:

$data = array(
    'hoge' => 123,
    'foo' => 456,
    'bar' => 789,
    'aaa' => array(
        'abc' => 111,
        'bcd' => 222,
        'cde' => 333
    ),
    'bbb' => array(
        'def' => array(
            'efg' => 'hoge'
        )
    ),
    'stacks' => array(
       'a',
       'b'=> array('qwe' => 111, 
                   'asd' => 222, 
                   'args' => array('1', 
                                   '2', 
                                   '3')),
       'c'
    )
);
    function get_array_elems($arrResult, $where="array"){
      while(list($key,$value)=each($arrResult)){
        if (is_array($value)){
          get_array_elems($value, $where."[$key]");
        }
      } else {
        ...anything
      }
    }


get_array_elems($arrResult);
通常使用如下函数:

$data = array(
    'hoge' => 123,
    'foo' => 456,
    'bar' => 789,
    'aaa' => array(
        'abc' => 111,
        'bcd' => 222,
        'cde' => 333
    ),
    'bbb' => array(
        'def' => array(
            'efg' => 'hoge'
        )
    ),
    'stacks' => array(
       'a',
       'b'=> array('qwe' => 111, 
                   'asd' => 222, 
                   'args' => array('1', 
                                   '2', 
                                   '3')),
       'c'
    )
);
    function get_array_elems($arrResult, $where="array"){
      while(list($key,$value)=each($arrResult)){
        if (is_array($value)){
          get_array_elems($value, $where."[$key]");
        }
      } else {
        ...anything
      }
    }


get_array_elems($arrResult);
我不能使用这个方法,因为我必须在一个PHP函数中编写这个方法,而它不能在另一个函数中编写函数


可以使用诸如while、foreach、array\u walk\u recursive等迭代方法来完成吗?

array\u walk\u recursive
仍然可以工作。只需使用匿名函数:作为回调。您可以在其他函数中使用匿名函数,因此它应该适合您。只需确保您至少使用了PHP5.3.0,因为匿名函数就是在这个时候引入的。

虽然我也不知道如何使用递归函数是不可能的,但作为一个编程练习,这是一个有趣的例子

如果要模拟递归,应该保留自己的堆栈以跟踪在每个级别中的位置,但这是一个真正的PITA,因此如果都是相同的,那么最好先按顺序遍历级别0、1、2等,然后收集嵌套数组。例如:

function walk($walk)
{
    while ( count($walk) > 0 )
    {
        $defer = array();
        foreach ( $walk as $k=>$v )
        {   
            if ( is_array($v) )
            {       
                foreach ( $v as $kk=>$vv ) $defer["$k.$kk"] = $vv;
            } else {
                print "$k=>$v\n";
            }       
        }   
        $walk = $defer;
    }
}

但这显然与典型的递归解决方案有不同的特点,这可能是个问题,也可能不是问题。

我可以问一下,为什么不能在函数内部使用函数调用吗?如果你想有一个迭代的方法,我不会把递归放在问题的标题里。哇,每次我读这些东西的时候都会学到一些新的东西。我没有意识到PHP使用了一个非。函数。太棒了!小心。。。匿名函数直到PHP5.3.0才被引入。