【问题标题】:Codeigniter - Unset session in a Two-dimensional arrayCodeigniter - 二维数组中的未设置会话
【发布时间】:2017-08-26 07:28:54
【问题描述】:

我创建了two-dimensional array 的会话。用户可以在哪里输入项目,当他/她单击ADD button 时,该项目的array 将插入到名为item_names 的会话中。现在,我正在尝试并且不能unset 某个项目,只要用户单击delete button,它上面有unique id。我发现函数unset_userdata() 已经不支持关联数组,正如我想要实现的那样。除此之外还有什么功能吗?

控制器.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
     )
   (

【问题讨论】:

  • 显示你的数组结构
  • @Irfan 更新帖子

标签: php arrays codeigniter session


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

  • 谢谢没弄明白,我已经在我的添加按钮功能中做到了!
  • 直接操作 $_SESSION 变量是否更好/更快?在这种情况下,我总是这样做以避免每次都重新加载会话数据。我不确定这对内存有多大影响。
  • 是的,您可以直接编辑 $_SESSION 变量。如果你在 codeigniter 的 session 类中检查 unset_userdata() 函数,它在 foreach 循环中也是一样的。所以你可以做相应的事情。
【解决方案2】:

您将不得不使用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]); 
        }
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多