尝试使用以下代码从Yii中的会话数组中删除元素。
$session = Yii::app()->session;
$arraylen = count($session['the_variable']);
for ($i = 0; $i < $arraylen; $i++)
{
if ($session['the_variable'][$i] == $providerId)
{
unset($session['the_variable'][$i]);
}
}
但它显示错误
间接修改CHttpSession的重载元素无效
我尝试使用array_splice($session['the_variable'],$i,$i-1);
而不是取消设置。然后它也显示相同的错误。是否有任何方法可以从会话数组中删除元素?.Iam使用2个不同的控制器操作插入会话数组并从会话数组中删除元素。
使用代码
$session = Yii::app()->session;
if (!isset($session['the_variable']) || count($session['the_variable']) == 0)
{
$session['the_variable'] = array($providerId);
} else
{
$myarr = $session['the_variable'];
$myarr[] = $providerId;
$session['the_variable'] = $myarr;
}
array('session' => $session);
插入效果很好,但删除无效。
答案 0 :(得分:2)
尝试:
$ vars =&amp; $ session ['the_variable'];
...
未设置($ VARS [$ i]于)
...
$ session是对象,而不是数组。 $session['the_variable']
超载$session->get('the_variable')
(http://www.yiiframework.com/doc/api/1.1/CHttpSession#get-detail)
或者,也许,您需要从会话中获取数组,更改它并重新保存...
答案 1 :(得分:2)
$session = Yii::app()->session;
$vars = $session['the_variable'];
$arraylen = count($vars);
for ($i = 0; $i < $arraylen; $i++)
{
if ($vars[$i] == $providerId)
{
unset($vars[$i]);
}
}
$vars = array_values($vars);
$session['the_variable'] = $vars;
现在它运作良好..感谢您的回复.. :)
答案 2 :(得分:0)
你不能通过这样的方式取消设置多维数组会话,我不知道为什么,但试试这个(我也简化了你的代码):
$session = Yii::app()->session;
$key = array_search($providerId,$session['the_variable']);
$session->remove($key);
答案 3 :(得分:0)
简单的事情:
Yii::app()->session->remove('the_variable');
or
$session = Yii::app()->session;
$session->remove('the_variable');
答案 4 :(得分:0)
Yii有一个内置的机制来干净利落地处理这个问题。遵守惯例并遵循正确的做法:
Yii::app()->session->remove('the_variable');
or
$session = Yii::app()->session;
$session->remove('the_variable');