有没有办法通过使用路径或路径元素数组来引用多维数组中的项? 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并且该函数仍然可以工作。
答案 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
我编写它来将名称从配置文件转换为数组,如果你想将路径本身作为一个数组传递,就像在你的例子中一样,只是忽略爆炸。