PHP -使用string作为键从多维数组中获取对元素的引用


PHP - Get a reference to an element from a multidimensional array by using string as key

是否有一种简单的、非求值的方法来获取对多维数组元素的引用?密钥应该以字符串的形式传递。

下面是一个例子:

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"}}}}