【发布时间】:2015-09-24 14:42:29
【问题描述】:
我得到了以下功能:
public function stopWatcherSession($sessionID) {
if(array_key_exists($sessionID, $_SESSION[self::WATCHER_SESSION_KEY])) {
foreach ($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]['names'] as $v) {
$ptype = $this->paramTypeFromName($v);
unset($_SESSION[self::SESSION_KEY][$ptype][$v]); //does not work, sets entry to null
}
unset($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]); //does not work, sets entry to null
}
}
正如 cmets 所说,数组条目没有被取消设置,array_key_exists() 函数仍然返回 true,如果你 var_dump($_SESSION) 可以看到,$_SESSION[self::WATCHER_SESSION_KEY][$sessionID] 为空。
如何取消设置变量,以便删除数组中的键?
我尝试过的事情,但没有奏效:
// v1 (tried also for `$_SESSION[self::WATCHER_SESSION_KEY][$sessionID]` )
$tmp = $_SESSION[self::SESSION_KEY][$ptype];
unset($tmp[$v]);
$_SESSION[self::SESSION_KEY][$ptype] = $tmp;
//v2
unset($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]);
session_write_close();
session_start();
//v3 => v1 & v2 combined
$tmp = $_SESSION[self::SESSION_KEY][$ptype];
unset($tmp[$v]);
$_SESSION[self::SESSION_KEY][$ptype] = $tmp;
session_write_close();
session_start();
我可以在整个代码中添加一个糟糕的 hack 来检查它是否是 null,但是必须将 »empty« 值更改为其他值(例如预定义的 const,但这是一个讨厌的解决方法,并导致其他人混淆开发者!)
有人有想法吗?
【问题讨论】:
-
空值可以保留在数组中,用于空值检查使用
isset -
如果“已提交,但未输入值”的标准值是
null并且不在数组中是“未提交”,那么让密钥仍然漂浮在周围并不是一件好事带有null-值。取消设置应该可以解决这个问题...
标签: php session unset array-unset