0

次のコードを使用して、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); unset の代わりに使ってみました。その後も同じエラーが表示されます。セッション配列から要素を削除する方法はありますか? 2 つの異なるコントローラー アクションを使用して、セッション配列に挿入し、セッション配列から要素を削除します。
コードを使用して Iam を挿入するには

$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);

挿入はうまくいきますが、削除はうまくいきません。

4

5 に答える 5

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;

今はうまくいっています..返信ありがとうございます..:)

于 2013-10-11T11:50:50.317 に答える
2

試す:

$vars = &$session['the_variable'];
...
unset($vars[$i])
...

$session は配列ではなくオブジェクトです。$session['the_variable']オーバーロードです$session->get('the_variable')( http://www.yiiframework.com/doc/api/1.1/CHttpSession#get-detail )

または、セッションから配列を取得し、変更して再保存する必要があるかもしれません...

于 2013-10-11T07:31:51.207 に答える
1

Yii には、これをきれいに処理するメカニズムが組み込まれています。規則を守り、正しい慣行に従ってください。

Yii::app()->session->remove('the_variable');
or
$session = Yii::app()->session;
$session->remove('the_variable');
于 2014-04-25T12:03:01.000 に答える
0

Easy stuff:

Yii::app()->session->remove('the_variable');
or
$session = Yii::app()->session;
$session->remove('the_variable');
于 2014-04-25T11:50:07.777 に答える
0

そのように設定を解除して多次元配列セッションを設定解除することはできません。理由はわかりませんが、これを試してください(コードも簡略化しました):

        $session = Yii::app()->session;
        $key = array_search($providerId,$session['the_variable']);
        $session->remove($key);
于 2013-12-16T17:12:49.367 に答える