取消设置深会话变量动态

时间:2014-09-24 15:06:35

标签: php session

我的会话类将会话设置为动态深度:

简化为:

$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'])

1 个答案:

答案 0 :(得分:0)

您无法取消设置引用的变量。

根据the documentation

  

取消设置引用时,只需断开变量名和变量内容之间的绑定即可。这并不意味着可变内容将被销毁

例如;

<?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

?>

https://eval.in/198105

完成任务

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]);
      }
    }
  }
}