簡體   English   中英

從會話中存儲的數組中刪除值

[英]Removing a value from array stored in session

我正在學習Yii,並且我正在嘗試使用此操作在會話中保存數組

public function actionStoreProducts($name)
        {
            $name=trim(strip_tags($name));
            $session = new CHttpSession;               //add this line
             $session->open(); 
            if(!empty($name))
            {
                if(!isset(Yii::app()->session['_products']))
                {
                    $session->add('_products', array($name)); 
                    $this->redirect(Yii::app()->request->urlReferrer);
            }
            else
            {

                $myProducts = Yii::app()->session['_products'];
                foreach(Yii::app()->session['_products'] as $value)
                {
                    if($value===$name)
                    {
                        $this->redirect(Yii::app()->request->urlReferrer);
                        Yii::app()->end();
                    }
                }
                $myProducts[] = $name;
               $session->add('_products', $myProducts);
               $session->close();
                $this->redirect(Yii::app()->request->urlReferrer);

            }

        }

它完美地工作。var_dump(Yii :: app()-> session ['_ products'])的結果

array(2) { [0] => string(5) "birla" [1] => string(4) "Tata" } 

現在,我想從會話中存儲的數組中刪除值“ Tata” 我試過了

public function actionCheck()
        {
           $name= 'Tata';
           if(isset(Yii::app()->session['_products']))
           {
               $session=new CHttpSession;
               $session->open();
               if(in_array($name,Yii::app()->session['_products'] ))
                {
                    $keyIs=  array_keys(Yii::app()->session['_products'], $name);
                    unset(Yii::app()->session['_products'][$keyIs[0]]);


                }

           }
           else
           {
               echo 'session is not set';
           }

        } 

但是會引發錯誤* 間接修改CHttpSession的重載元素沒有任何作用*所以我的問題是如何從會話中存儲的數組中刪除一個值?

$name= 'Tata';
    if(isset(Yii::app()->session['_products']))
    {
        $k=array_search($name,Yii::app()->session['_products']);
        if ($k!==false){
            unset(Yii::app()->session['_products'][$k]);
        }
    }

與未設置的簡單數組相同。

我已經解決了問題。我只是將會話中的數組傳遞給變量。 然后我從該數組中刪除了值,然后再次將會話的值設置為array.this是代碼

public function actionCheck()
{
$name='Tata';
            if(isset(Yii::app()->session['_products']))
            {

                $arrayOfProducts=Yii::app()->session['_products'];
                $keyIs=  array_search($name, $arrayOfProducts);
                if($keyIs!== false)
                {
                    unset($arrayOfProducts[$keyIs]);
                    Yii::app()->session['_products']=$arrayOfProducts;
                }
           }

}

正如我之前對您所說的,會話屬性是只讀的。

要刪除會話,您必須執行以下操作:

public function actionCheck()
        {
           $name= 'Tata';
           if(isset(Yii::app()->session['_products']))
           {
               $session=new CHttpSession;
               $session->open();
               if(in_array($name,Yii::app()->session['_products'] ))
                {
                    $keyIs=  array_keys(Yii::app()->session['_products'], $name);
                    $session->remove($name);     //Replace this line whit unset


                }

           }
           else
           {
               echo 'session is not set';
           }

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM