【问题标题】:Going through my entire $_SESSION array and removing null variables遍历我的整个 $_SESSION 数组并删除空变量
【发布时间】:2011-05-07 15:32:26
【问题描述】:

我一直在使用 $_SESSION 变量进行一些测试,其中很多变量设置为 NULL,但仍然存在。我可以一个一个地删除它们,但是我怎样才能循环遍历 $_SESSION 数组并快速删除 NULL 变量?

【问题讨论】:

    标签: php


    【解决方案1】:

    您可以将array_filter 与使用is_null 的回调函数一起使用:

    $output = array_filter($input, function($val) { return !is_null($val); });
    

    【讨论】:

    • $output = array_filter($input, 'count'); 将具有(几乎)相同的效果。
    【解决方案2】:
    $_SESSION = array_filter($_SESSION, 'count');
    

    将具有删除所有NULL 值(因为count()NULL 返回0)以及任何具有0 个元素的可数(数组或对象)从PHP manual

    返回 var 中的元素个数, 这通常是一个数组,因为 其他任何东西都只有一个元素。

    如果 var 不是数组或对象 带有实现的 Countable 接口, 1 将被退回。 有一个 异常,如果 var 为 NULL,则为 0 返回。

    由于 0 在布尔上下文中的计算结果为 false,因此无需实现任何自定义函数。

    【讨论】:

      【解决方案3】:

      这将删除NULL 值,但不会删除其他空值或FALSE。如果您还想摆脱 FALSE vals 和空字符串等,可以轻松修改。

      foreach ($_SESSION as $key=>$var)
      {
        if ($var === NULL) unset($_SESSION[$key]);
      }
      

      【讨论】:

        【解决方案4】:

        $_SESSION = array_filter($_SESSION);

        这将从会话数组中删除所有“虚假”值,包括null

        【讨论】:

          【解决方案5】:

          应该这样做:

          foreach ($_SESSION as $key => $value)
          {
              if ($value === NULL)
                  unset($_SESSION[$key];
          }
          

          附: array_filter 将删除任何等于“假”的东西。如果您只需要删除 NULL 值并保留空字符串或零,则应提供自己的回调函数或使用此示例。

          【讨论】:

            【解决方案6】:
            foreach($_SESSION as $key => $value){
               if(empty($value) || is_null($value)){
                   unset($_SESSION[$key]);
               }
            }
            

            【讨论】:

              【解决方案7】:

              如果您通过将 value 设置为 NULL 来“删除”$_SESSION 元素,那么您做错了。要取消设置数组元素,您应该使用 unset$_SESSION 元素上。

              # Wrong
              $_SESSION['foo'] = NULL;
              
              #Good
              unset($_SESSION['foo']);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-11-10
                • 2023-03-10
                • 1970-01-01
                • 2011-11-30
                • 1970-01-01
                • 2015-01-19
                相关资源
                最近更新 更多