递归遍历数组

时间:2013-03-27 20:48:14

标签: php

$arr = array('aaa' => 
   array('bbb' => 
      array('ccc' => 
         array('ddd' => 
            'finally'))));

function walk($args) {
   $keys = get_func_args();
   // ...
}

walk('aaa', 'bbb', 'ccc', 'ddd');

我希望此函数遍历此多维数组并获取“finally”值。 walk()函数检索随机数量的参数,因此不知道数组维数。

我该怎么做?

我虽然有一些递归方式......但是,好吧,我只是无法弄清楚。你能给我任何建议吗?

3 个答案:

答案 0 :(得分:1)

$arr = array('aaa' => 
   array('bbb' => 
      array('ccc' => 
         array('ddd' => 
            'finally'))));

function walk() {

  $keys = func_get_args();

  $array = array_shift($keys);

  foreach ($keys as $key)
  {
    $array = $array[$key];
  }

  return $array;

}

echo walk($arr, 'aaa', 'bbb', 'ccc', 'ddd'); // finally

答案 1 :(得分:1)

你可以使用这个小班级

$walker = new Walker($arr);
echo $walker->find('aaa', 'bbb', 'ccc', 'ddd'); //finally

class Walker {
    private $a; // array
    function __construct($a) {
        $this->a = $a;
    }

    function find() {
        $temp = $this->a;
        foreach ( func_get_args() as $key ) {
            $temp = isset($temp[$key]) ? $temp[$key] : null;
        }
        return $temp;
    }
}

答案 2 :(得分:1)

创建一个新函数,它接受一个键数组和一个索引。对于每个新调用,将索引增加1,直到它是最后一个键。多数民众赞成,当你知道你有答案时!

 $arr = array('aaa' => 
   array('bbb' => 
      array('ccc' => 
         array('ddd' => 
            'finally'))));

function walk($myArray, $keys, $index) {
   if ($index == count($keys) -1){
      return $myArray[$index];
   }
   return walk($myArray[$keys[$index]],$keys,$index+1);
}

$keys = array('aaa', 'bbb', 'ccc', 'ddd');
$result = walk ($arr,$keys,0);