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

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

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

我希望这个函数遍历这个多维数组并获得“最终”值。walk() 函数检索随机数量的参数,因此数组维度的数量是未知的。

我怎么做?

我虽然有一些递归方式......但是,我只是想不出任何东西。你能给我一些建议吗?

4

3 回答 3

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);
于 2013-03-27T21:06:28.277 回答
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
于 2013-03-27T20:55:51.227 回答
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;
    }
}
于 2013-03-27T21:04:42.203 回答