【发布时间】:2011-05-07 15:32:26
【问题描述】:
我一直在使用 $_SESSION 变量进行一些测试,其中很多变量设置为 NULL,但仍然存在。我可以一个一个地删除它们,但是我怎样才能循环遍历 $_SESSION 数组并快速删除 NULL 变量?
【问题讨论】:
标签: php
我一直在使用 $_SESSION 变量进行一些测试,其中很多变量设置为 NULL,但仍然存在。我可以一个一个地删除它们,但是我怎样才能循环遍历 $_SESSION 数组并快速删除 NULL 变量?
【问题讨论】:
标签: php
您可以将array_filter 与使用is_null 的回调函数一起使用:
$output = array_filter($input, function($val) { return !is_null($val); });
【讨论】:
$output = array_filter($input, 'count'); 将具有(几乎)相同的效果。
$_SESSION = array_filter($_SESSION, 'count');
将具有删除所有NULL 值(因为count() 为NULL 返回0)以及任何具有0 个元素的可数(数组或对象)从PHP manual :
返回 var 中的元素个数, 这通常是一个数组,因为 其他任何东西都只有一个元素。
如果 var 不是数组或对象 带有实现的 Countable 接口, 1 将被退回。 有一个 异常,如果 var 为 NULL,则为 0 返回。
由于 0 在布尔上下文中的计算结果为 false,因此无需实现任何自定义函数。
【讨论】:
这将删除NULL 值,但不会删除其他空值或FALSE。如果您还想摆脱 FALSE vals 和空字符串等,可以轻松修改。
foreach ($_SESSION as $key=>$var)
{
if ($var === NULL) unset($_SESSION[$key]);
}
【讨论】:
$_SESSION = array_filter($_SESSION);
这将从会话数组中删除所有“虚假”值,包括null。
【讨论】:
应该这样做:
foreach ($_SESSION as $key => $value)
{
if ($value === NULL)
unset($_SESSION[$key];
}
附: array_filter 将删除任何等于“假”的东西。如果您只需要删除 NULL 值并保留空字符串或零,则应提供自己的回调函数或使用此示例。
【讨论】:
foreach($_SESSION as $key => $value){
if(empty($value) || is_null($value)){
unset($_SESSION[$key]);
}
}
【讨论】:
如果您通过将 value 设置为 NULL 来“删除”$_SESSION 元素,那么您做错了。要取消设置数组元素,您应该使用
unset
在$_SESSION 元素上。
# Wrong
$_SESSION['foo'] = NULL;
#Good
unset($_SESSION['foo']);
【讨论】: