PHP(7)动态会话数据检索

问题描述:

我读到会议包装方式和存在方式:PHP(7)动态会话数据检索

/* 
    to set something like $_SESSION['key1']['key2']['key3']: 
    $session->setMd(array('key1', 'key2', 'key3'), 'value') 
*/ 
public function setMd($keyArray, $val) 
{ 
    $arrStr = "['".implode("']['", $keyArray)."']"; 
    $_SESSION{$arrStr} = $val; 
} 

这正是我需要的,但是当我试图用这种方式如下:

$this->path = ['a','bb','ccc']; 
$this->_sessionStorage{"['".implode("']['",$this->path)."']"} = 'dddd'; 
ddd($this->_sessionStorage); 

我得到这样的输出:

array(1) { 
    ["['a']['bb']['ccc']"]=> 
    string(4) "dddd" 
} 

这是假的还是我做错了什么?

不,这是php的预期行为。如果你想以这种方式访问​​数据,你应该使用一个循环。像这样的东西可以为你工作。

function setMd($keyArray, $value) { 
    $data = &$_SESSION; 
    foreach ($keyArray as $key) { 
     $data = &$data[$key]; 
    } 
    $data = $value; 
}