我试图在Laravel会话的上下文中使用unset/array_splice
从数组中删除项目的索引。
我拥有的是:
检查class
会话密钥是否存在
如果是这样,请获取并循环播放
如果该特定索引的元素(字符串)与输入字符串(来自AJAX请求)匹配,则取消设置,并put
新未设置的数组返回会话
此操作理论(我的生活故事)应该从购物车中删除一个项目。
// 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响应。
编辑:
好的,所以我做了一点突破。
我忘记在会话中将密钥分配给put
,因此我已将其更改为:Session::put('class', $data)
接下来,由于索引事项如何与array_splice
一起使用,所以取消设置适用于大于1的所有索引。如果要取消设置的当前索引是0
或{{1它失败了,因为“新”索引分别转为1
和-1
..
答案 0 :(得分:0)
根据建议,我使用了thread中的unset
和array_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 4
。 array_values
将重新索引所有内容,生活再次良好。