我读了关于会话包装的方法,有方法:
/*
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;
}