Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter-二维数组中的未设置会话_Php_Arrays_Codeigniter_Session - Fatal编程技术网

Php Codeigniter-二维数组中的未设置会话

Php Codeigniter-二维数组中的未设置会话,php,arrays,codeigniter,session,Php,Arrays,Codeigniter,Session,我创建了会话的二维数组。用户可以在其中输入项目,当他/她单击添加按钮时,该项目的数组将插入名为项目名称的会话中。现在我正在尝试,每当用户单击带有唯一id的删除按钮时,我都无法取消设置某个项目。我发现函数unset\u userdata()已经不支持关联数组了,这正是我想要实现的。除此之外还有其他功能吗 Controller.php public function delete_item(){ $app_no = $this->input->post('app_no'); /

我创建了会话的二维数组。用户可以在其中输入项目,当他/她单击
添加按钮时,该项目的
数组
将插入名为
项目名称
的会话中。现在我正在尝试,每当用户单击带有唯一id的
删除按钮时,我都无法
取消设置某个项目。我发现函数
unset\u userdata()
已经不支持关联数组了,这正是我想要实现的。除此之外还有其他功能吗

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
     )
   (

您将不得不使用常规PHP


不能在codeingiter会话中直接取消多维数组的特定值。您必须将所有会话值设置为变量。取消设置特定值,然后在会话中再次设置变量,如下所示:

$items_session = $this->session->userdata('item_names'); unset($items_session[$key][$app_no]); $this->session->set_userdata('item_names',$items_session); $items\u session=$this->session->userdata('item\u name'); 未设置($items_session[$key][$app_no]); $this->session->set_userdata($items\u name',$items\u session);
希望这会有所帮助。

显示您的阵列structure@Irfan更新的PostThank没有弄明白,我已经在我的添加按钮功能中完成了!直接操作$\u会话变量是否更好/更快?在这种情况下,我总是这样做,以避免每次都必须重新加载会话数据。我不确定这对内存的影响有多大。是的,您可以直接编辑$\u会话变量。若您在codeigniter的会话类中检查unset_userdata()函数,它在foreach循环中也会执行相同的操作。所以你可以做相应的事情。 $items_session = $this->session->userdata('item_names'); unset($items_session[$key][$app_no]); $this->session->set_userdata('item_names',$items_session);