1

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

$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 并且该功能仍然可以工作。

4

1 回答 1

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

我编写它是为了将名称从配置文件转换为数组,如果您想像示例中那样将路径本身作为数组传递,只需省略爆炸即可。

于 2013-02-10T15:02:59.720 回答