使用数组项的路径

时间:2013-02-10 14:57:38

标签: php arrays

有没有办法通过使用路径或路径元素数组来引用多维数组中的项? EG。

$multi = array
(
    'array_1' => array
    (
        'array_2' => array
        (
            'option_1' => 'value_1',
            'option_2' => 'value_2',
        )
    )
);

$path = array('level_1', 'level_2', 'option_1');
$result = $multi[$path];

并且$ result ='value_1'?

原因是,我有一个递归函数,用于搜索$ multi并找到我需要的密钥,并返回$ path。我知道我可以在我自己的代码的路径中硬编码,但我正在尝试使这个可重用,以便我可以编辑$ multi并且该函数仍然可以工作。

1 个答案:

答案 0 :(得分:4)

PHP没有内置任何功能,但您可以使用移动引用为其编写函数:

/**
 * @param string $path path in the form 'item_1.item_2.[...].item_n'
 * @param array $array original array
 */
function &get_from_array($path, &$array)
{
    $current =& $array;
    foreach(explode('.', $path) as $key) {
        $current =& $current[$key];
    }
    return $current;
}

示例:

// get element:
$result = get_from_array('level_1.level_2.option_1', $multi);
echo $result; // --> value_1

$result = 'changed option';
echo $multi['level_1']['level_2']['option_1']; // --> changed_option

我编写它来将名称从配置文件转换为数组,如果你想将路径本身作为一个数组传递,就像在你的例子中一样,只是忽略爆炸。