无法从Laravel会话数组中取消设置项目

时间:2015-08-06 19:35:21

标签: php session laravel

我试图在Laravel会话的上下文中使用unset/array_splice从数组中删除项目的索引。

我拥有的是:

  1. 检查class会话密钥是否存在

  2. 如果是这样,请获取并循环播放

  3. 如果该特定索引的元素(字符串)与输入字符串(来自AJAX请求)匹配,则取消设置,并put新未设置的数组返回会话

  4. 此操作理论(我的生活故事)应该从购物车中删除一个项目。

    // Remove the item [if exists]
    if(Session::has('class')) {
        $classes = Session::get('class');
        foreach($classes as $index => $class) {
            if($data['class'] === $class) {
                array_splice($classes, $index, $index - 1);
                Session::put('class', $classes);
    
                return Response::json(array(
                        'success' => true,
                        'code' => 1,
                        'message' => $data['class'] . ' removed from cart'
                    )
                );
            }
        }
    }
    

    class会话中的数据如下所示:

    [
       "ECEC 471 Introduction to VLSI Design Lab",
       "ECEC 471 Introduction to VLSI Design Lecture",
       "ECEC 413 Introduction to Parallel Computer Architecture Lecture",
       "ECEC 457 Security in Computing Lecture & Recitation"
    ] 
    

    我在逻辑上跟踪了几次代码,但它没有取消设置项目。我知道字符串是匹配的,因为我返回了显示的查询的JSON响应。

    编辑:

    好的,所以我做了一点突破。

    1. 我忘记在会话中将密钥分配给put,因此我已将其更改为:Session::put('class', $data)

    2. 接下来,由于索引事项如何与array_splice一起使用,所以取消设置适用于大于1的所有索引。如果要取消设置的当前索引是0或{{1它失败了,因为“新”索引分别转为1-1 ..

1 个答案:

答案 0 :(得分:0)

根据建议,我使用了thread中的unsetarray_values

    // Remove the item [if exists]
    if(Session::has('class')) {
        $classes = Session::get('class');
        foreach($classes as $index => $class) {
            if($data['class'] === $class) {
                unset($classes[$index]);
                $newClass = array_values($classes);
                Session::put('class', $newClass);
                return Response::json(array(
                        'success' => true,
                        'code' => 1,
                        'class' => $classes,
                        'message' => $data['class'] . ' removed from cart'
                    )
                );
            }
        }
    }

当您使用unset时,它会删除该特定索引,但它不会保留索引,因此,如果您要删除第一个索引,那么数组索引看起来像这样:0 2 3 4array_values将重新索引所有内容,生活再次良好。