我的会话类将会话设置为动态深度:
简化为:
$keys = "test.deep.more";
$keys = explode(".", $keys);
$current = &$_SESSION;
foreach($keys as $key) {
$current = &$current[$key];
}
输出是:
Array
(
[test] => Array
(
[deep] => Array
(
[more] =>
)
)
)
但是,我怎样才能取消变量?
unset($current)
不起作用。 $current
目前为null
,因为more
没有价值。
有人有想法吗?
修改
更清楚:我需要一种方法来取消设置动态深层会话数组。我的尝试:
$session = &$_SESSION;
foreach($keys as $key) {
$session = &$session[$key];
}
unset($session);
或者unset()
参考不起作用吗?
EDIT2:
任何人都知道如何动态创建一个取消深度会话的功能?没有打字
unset($_SESSION['test']['deep']['more'])
答案 0 :(得分:0)
您无法取消设置引用的变量。
取消设置引用时,只需断开变量名和变量内容之间的绑定即可。这并不意味着可变内容将被销毁
<?php
$a = 1;
$b =& $a; //Assign $a to $b by reference
unset($b); //Unset $b (hoping to unset $a)
var_dump($a); //This prints
var_dump($b); //$b doesn't exist
?>
unsetDeep($_SESSION, 'more');
function unsetDeep(&$array, $findKey) {
foreach ($array as $key => &$value) {
if (is_array($value) AND $key != $findKey) {
unsetDeep($value, $findKey);
} else {
if ($key == $findKey){
unset($array[$key]);
}
}
}
}