【发布时间】:2014-03-01 17:43:47
【问题描述】:
我创建了一个小函数,通过用类 Unix 路径语法编写的字符串从多维数组中解析和获取元素。
function array_get($path, &$array) {
$keys = preg_split('/[\/\\\]+/', $path, null, PREG_SPLIT_NO_EMPTY);
$current = trim(array_shift($keys));
if (is_array($array) && array_key_exists($current, $array)) {
$path = implode("/", $keys);
if (empty($path)) {
// (Place the code here, see below)
return $array[$current];
}
return array_get($path, $array[$current]);
}
return false;
}
如果我有一个像这样的简单数组
$arr = array(
"A" => array(
"X" => array(),
"Y" => array(),
"Z" => array()
),
"B" => array(
"X" => array(),
"Y" => array(),
"Z" => array()
),
"C" => array(
"X" => array(),
"Y" => array(),
"Z" => array()
)
);
我希望将其填入这些条目中
$arr['A']['Z'][] = "foo";
$arr['A']['Z'][] = "bar";
我会使用以下语句做同样的工作:
$var = array_get("A/Z", $arr);
$var[] = "foo";
$var[] = "bar";
但是出了点问题。
如果您尝试运行代码,您会注意到超出本地范围对传递的数组的引用将丢失。
如果您想运行测试,可以将函数内的占位符注释行替换为以下两行代码:
$array[$current][] = "foo";
$array[$current][] = "bar";
然后您将看到该函数实际上会执行它自己的工作。
有没有办法在输出中维护引用?
【问题讨论】:
-
是的,有这样的a way。
标签: php arrays function multidimensional-array pass-by-reference