我正在尝试重新编辑Cookie值。
当我不使用&$prod
时,它不会更改数组值。
当我使用&$prod
时,它会更改数组,但我得到:
为foreach()提供的参数无效
有没有其他方法可以更新现有数组或为什么我会收到此错误?
$existingCookie = Cookie::get($cookie);
$arr = json_decode($existingCookie, true);
foreach ($arr as &$prod) {
if($productId === $prod["pid"]) {
if($prod["pqty"]!=$productQty){
$prod["pqty"] = $productQty;
$arr = json_encode($arr);
Cookie::put($cookie, $arr, Config::get('cart/cookie_expiry'));
echo var_dump($arr) . ' - '.$prod["pqty"];
}
}
}
答案 0 :(得分:0)
我认为您想要修复整个$arr
,然后在循环之后,只更新一次cookie。这种逻辑上直接的方法也消除了错误。
您收到错误的原因是您在foreach表达式中使用&
并在循环中编写$arr = json_encode($arr);
。循环不迭代输入数组的“副本”(默认情况下),由于&$prod
,它正在迭代输入数组本身。满足这两个条件后,$arr
将转换为json字符串,并且foreach循环会对其进行扼流。
$arr=json_decode(Cookie::get($cookie), true);
foreach($arr as &$prod){
if($prod["pid"]===$productId && $prod["pqty"]!==$productQty){
$prod["pqty"]=$productQty;
}
}
Cookie::put($cookie, json_encode($arr), Config::get('cart/cookie_expiry'));