2017-08-26 5 views
1

私はセッションのtwo-dimensional arrayを作成しました。ユーザーが項目を入力できるところで、ADD buttonをクリックすると、その項目のarrayitem_namesというセッションに挿入されます。今私はしようとしているし、ユーザがdelete buttonをクリックするたびにunsetはそれがunique idを持っているときは、特定のアイテムを得ることができません。私は、関数unset_userdata()が、連想配列をすでにサポートしていないことを、私が達成しようとしているものとして発見しました。これ以外の機能はありますか?Codeigniter - 2次元配列のセッションを解除する

Controller.php

public function delete_item(){ 
    $app_no = $this->input->post('app_no'); // product id of item 
    $items_session = $this->session->userdata('item_names'); 

    foreach ($items_session as $key => $value) { 
     if($value['product_id'] == $app_no){ 
      $this->session->unset_userdata($items_session[$key][$app_no]); 
     } 
    } 
    } 

アレイ構造

Array 
    (
     [0] => Array 
    (
     [product_id] => 201708010010 
     [product_name] => LADDER BRICK 
     [total_prod_price] => P50 
     [requestQty] => 1 
    ) 
    (
+1

あなたの配列構造を表示 –

+0

@Irfan updated投稿 – Dre

答えて

1

多次元配列の特定の値をcodeingiterのセッションで直接設定解除することはできません。すべてのセッション値を変数に取らなければなりません。特定の値の設定を解除し、セッション内の変数を次のように再度設定します。

 

    $items_session = $this->session->userdata('item_names'); 
    unset($items_session[$key][$app_no]); 
    $this->session->set_userdata('item_names',$items_session); 

希望します。

+0

ありがとう、私はすでに私の追加ボタン機能でこれをやった! – Dre

+0

$ _SESSION変数を直接操作する方が良いか速いのですか?毎回セッションデータをリロードする必要がないように、私はいつもこのようにしています。これがメモリに与える影響の大きさがわかりません。 – qwertzman

+0

はい、$ _SESSION変数を直接編集できます。 codeigniterのセッションクラスでunset_userdata()関数をチェックすると、foreachループでも同じことが行われます。あなたはそれに応じてやります。 –

0

あなたはunsetで定期的にPHPを有効にする必要があります。

public function delete_item(){ 
    $app_no = $this->input->post('app_no'); // product id of item 
    $items_session = $this->session->userdata('item_names'); 

    foreach ($items_session as $key => $value) { 
     if($value['product_id'] == $app_no){ 
      unset($items_session[$key][$app_no]); 
     } 
    } 
    } 
+0

私は前にunsetを使ってみましたが、まだ動作していません – Dre