假设我有一个会话数组,如下所示
array(
'boking' = array(
'index1' => 'value1'
'index2' => 'value2'
),
'return' = array(
'index1' => 'value1'
'index2' => 'value2'
),
'search' = array(
'index1' => 'value1'
'index2' => 'value2'
)
)
现在我想删除boking
和search
要完成此任务,我尝试了
Session::forget('boking');
Session::forget('search');
它工作正常。
但是我想在一个命令中删除这个多键。是否有可能在一个命令中做到这一点?
根据源代码Session::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|string $keys
array_forget
,因此您应该能够执行
Session::forget(['boking', 'search']);
但是,由于Session::forget
没有将array
列为$key
的可能值,并以单数形式显式命名参数,因此不应依赖该行为。它可能会改变。再说一次,它也可能只是一个文档错误。考虑和拉拉维尔的家伙开一张票。
为了完整和参考,这里是要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;
}
}
您可以尝试以下代码:
Session::forget(['test1', 'test2']);