【问题标题】:How to remove multiple key at a single command from session in laravel如何从 laravel 的会话中删除单个命令中的多个键
【发布时间】:2015-02-24 19:57:36
【问题描述】:

假设我有一个像这样的会话数组

array(
     'boking' = array(
                    'index1' => 'value1'
                    'index2' => 'value2'
               ),
     'return' = array(
                    'index1' => 'value1'
                    'index2' => 'value2'
               ),
     'search' = array(
                    'index1' => 'value1'
                    'index2' => 'value2'
               )
)

现在我想删除 bokingsearch

为了完成这项任务,我已经尝试过

Session::forget('boking');
Session::forget('search');

它工作正常。

但我想在一个命令中删除这个多个键。 有没有可能在一个命令中做到这一点?

【问题讨论】:

    标签: php session laravel laravel-4


    【解决方案1】:

    根据source codeSession::forget定义为

    /**
     * Remove an item from the session.
     *
     * @param string $key
     * @return void
     */
     public function forget($key)
     {
         array_forget($this->attributes, $key);
     }
    

    array_forget 函数定义为

    /**
     * Remove one or many array items from a given array using "dot" notation.
     *
     * @param array $array
     * @param array|string $keys
     * @return void
     */
     function array_forget(&$array, $keys)
     {
         return Arr::forget($array, $keys);
     }
    

    由于Session::forget 不对$key 强制执行任何类型,并将您传递给它的任何内容传递给array_forget,后者接受array|string $keys,您应该可以这样做

    Session::forget(['boking', 'search']);
    

    但是,由于Session::forget 没有将array 列为$key 的可能值,并且以单数形式显式命名参数,因此您不应依赖该行为。它可能会改变。再说一次,它也可能只是一个文档错误。考虑与 Laravel 人开一张票。

    为了完整和参考,这里是Arr::forget的代码:

    /**
     * Remove one or many array items from a given array using "dot" notation.
     *
     * @param  array  $array
     * @param  array|string  $keys
     * @return void
     */
    public static function forget(&$array, $keys)
    {
        $original =& $array;
    
        foreach ((array) $keys as $key)
        {
            $parts = explode('.', $key);
    
            while (count($parts) > 1)
            {
                $part = array_shift($parts);
    
                if (isset($array[$part]) && is_array($array[$part]))
                {
                    $array =& $array[$part];
                }
            }
    
            unset($array[array_shift($parts)]);
    
            // clean up after each pass
            $array =& $original;
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以尝试以下代码:

      Session::forget(['test1', 'test2']);
      

      【讨论】:

        猜你喜欢
        • 2018-04-09
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 2019-12-30
        • 1970-01-01
        相关资源
        最近更新 更多