我做了一個小函數來解析和獲取來自多維數組的元素,其中使用類Unix語言的路徑語法編寫的字符串。PHP - 丟失函數中的數組引用(本地到全局)
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";
然後你會看到該功能實際上執行自己的任務。
有沒有辦法讓保持引用的輸出?
是的,有這樣[方法](https://eval.in/98153)。 – raina77ow