通过参数访问php数组子?

时间:2009-12-27 20:45:30

标签: php arrays recursion key

我有一个独特的案例,我有一个像这样的数组:

$a = array('a' => array('b' => array('c' => 'woohoo!')));

我想以这样的方式访问数组的值:

  • some_function($a, array('a'))将返回位置 a
  • 的数组
  • some_function($a, array('a', 'b', 'c'))会返回'woohoo'一词

基本上,它使用第二个参数中的传入变量在数组中向下钻取,并检查结果中是否存在该键。关于一些本机php函数的任何想法可以帮助做到这一点?我假设它需要使用递归。任何想法都会非常感激。

感谢。

4 个答案:

答案 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)

您可以尝试使用RecursiveArrayIterator

这是example on how to use it

答案 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

这不会吗?