我有一个独特的案例,我有一个像这样的数组:
$a = array('a' => array('b' => array('c' => 'woohoo!')));
我想以这样的方式访问数组的值:
some_function($a, array('a'))
将返回位置 a some_function($a, array('a', 'b', 'c'))
会返回'woohoo'一词基本上,它使用第二个参数中的传入变量在数组中向下钻取,并检查结果中是否存在该键。关于一些本机php函数的任何想法可以帮助做到这一点?我假设它需要使用递归。任何想法都会非常感激。
感谢。
答案 0 :(得分:2)
这是一个递归实现:
function some_function($array, $path) {
if (!count($path)) {
return;
}
$key = array_shift($path);
if (!array_key_exists($key, $array)) {
return;
}
if (count($path) > 1) {
return some_function($array[$key], $path);
} else {
return $array[$key];
}
}
一个迭代实现:
function some_function($array, $path) {
if (!count($path)) {
return;
}
$tmp = &$array;
foreach ($path as $key) {
if (!array_key_exists($key, $tmp)) {
return;
}
$tmp = &$tmp[$key];
}
return $tmp;
}
如果路径无效,这些函数将返回 null 。
答案 1 :(得分:2)
答案 2 :(得分:2)
这是未经测试的,但您不需要递归来处理这种情况:
function getValueByKey($array, $key) {
foreach ($key as $val) {
if (!empty($array[$val])) {
$array = $array[$val];
} else return false;
}
return $array;
}
答案 3 :(得分:1)
$a['a']
返回位置a
的数组
$a['a']['b']['c']
会返回woohoo
。
这不会吗?