$arr = array('aaa' =>
array('bbb' =>
array('ccc' =>
array('ddd' =>
'finally'))));
function walk($args) {
$keys = get_func_args();
// ...
}
walk('aaa', 'bbb', 'ccc', 'ddd');
我希望此函数遍历此多维数组并获取“finally”值。 walk()函数检索随机数量的参数,因此不知道数组维数。
我该怎么做?
我虽然有一些递归方式......但是,好吧,我只是无法弄清楚。你能给我任何建议吗?
答案 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);