是否有一种简单的、非求值的方法来获取对多维数组元素的引用?密钥应该以字符串的形式传递。
下面是一个例子:
getSessionReference('1.4.2', $arrReference);
应该返回对
的引用 $_SESSION['1']['4']['2']
和
这样的调用 $arrReference['foo'] = 'bar';
将其更改为
$_SESSION['1']['4']['2']['foo'] = 'bar'
任何想法?
$arr[5][6][7] = 111;
$cursor =& $arr;
foreach (explode('.', '5.6') as $key) {
$cursor =& $cursor[$key];
}
var_dump($arr);
var_dump($cursor);
$cursor['foo'] = 5;
var_dump($arr);
var_dump($cursor);
http://codepad.viper - 7. - com/xuehmj
或函数形式
function & getSessionRef($keyPath) {
$cursor =& $_SESSION;
foreach (explode('.', $keyPath) as $key) {
$cursor =& $cursor[$key];
}
return $cursor;
}
$cursor =& getSessionRef('a.6');
btw -我在代码中使用了名为references的php特性,在那里您可以看到像=&
一样的&符号。
使用引用传递。
function getReference($key, &$arr)
{
$e = explode('.', $key);
foreach ($_SESSION[$e[0]][$e[1]][$e[2]] as $k => &$v)
$arr[$k] = $v;
}
$arr = array();
getReference("1.4.2", $arr);
注。:这实际上并不返回引用,但它满足了您的需求。
这应该是你想要的:
function &getSessionReference($keyStr, &$session) {
$keys = explode('.', $keyStr);
$temp = &$session;
foreach ($keys as $key) {
$temp = &$temp[$key];
}
return $temp;
}
$_SESSION['1']['4']['2'] = [];
$arrReference = &getSessionReference('1.4.2', $_SESSION);
$arrReference['foo'] = 'bar';
echo json_encode($_SESSION);
// {"1":{"4":{"2":{"foo":"bar"}}}}