更新:
我认为问题出现的原因是可以从会话阵列中删除最后一个密钥编号,但是当我不删除最后一个密钥编号时,我会得到不同的格式。不知道如何解决这个问题。
我目前通过角度请求存储和检索数据 从Laravel会话数组中放入和检索值。
// Code for pushing into Laravel Session Array
Session::push('cart', $object);
// Code for retrieving data into Laravel Session Array
return Session::get('cart');
现在我使用foreach循环更新数量或问题所在 是关于:从Laravel会话阵列购物车中删除对象时 数量为0。
public function updateQuantity($id, $quantity, $operator){
$cart = Session::get('cart', []);
foreach ($cart as $index => &$product) {
if ($product['id'] == $id) {
if($operator == '+'){
$product['quantity'] = $product['quantity'] + $quantity;
} else if($operator == '-'){
$product['quantity'] = $product['quantity'] - $quantity;
if($product['quantity'] == 0){
Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);
}
}
Session::set('cart', $cart);
$this->new_product = false;
break;
}
}
return $this->new_product;
}
上面这部分代码正在改变我的JSON输出:
Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);
删除前的JSON情况:
[
{
"id":293,
"quantity":2
},
{
"id":294,
"quantity":2
}
]
删除后的JSON情况:
{"1":{"id":293,
"quantity":2}
}
但应该是:
[
{
"id":293,
"quantity":2
}
]
这是我的Angular Get Request,只需调用:return Session::get('cart')
Cart.getCart()
.then(function (success){
$scope.cart = success.data;
}).catch(function (e){
console.log("got an error in the process", e);
});
任何帮助将不胜感激。不确定是什么导致我的json数组转换为不同的数据模型。
附加说明:当我在Session中添加最后一个对象并再次删除同一个对象时,它按预期工作。当我切换删除顺序时,它会弄乱json。
答案 0 :(得分:0)
更新了更好的解决方案:
从另一个stackoverflow文章中得到了这个理论: deleting JSON array element in PHP, and re-encoding as JSON
此处的代码调整:
Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);
将:
Session::forget('cart.' . $index);
Session::get('cart', []);
return null;
获取会话购物车价值
return json_encode(array_values(Session::get('cart')));
只需要使用array_values
。这将重新编号json数组。
旧解决方案:
通过替换以下内容解决了问题:
Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);
将以下代码替换为:
Session::forget('cart.' . $index);
$temp_cart = Session::get('cart', []);
Session::forget('cart');
foreach($temp_cart as $c){
Session::push('cart', $c);
}
return null;
不要认为这是最好的解决方案,因为我正在重建整个会话阵列,所以欢迎任何想法。