使用 & 获取为 foreach() 提供的无效参数
Getting Invalid argument supplied for foreach() by using &
我正在尝试重新编辑 cookie 值。
当我不使用 &$prod
时,它不会更改数组值。
当我使用 &$prod
时,它改变了数组但我得到:
Invalid argument supplied for 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"];
}
}
}
我想你想修复整个 $arr
然后在循环之后,只更新一次 cookie。这种逻辑上直接的方法也消除了错误。
您收到错误的原因是因为您在 foreach 表达式中使用 &
并在循环中写入 $arr = json_encode($arr);
。循环不是迭代输入数组的 "copy"(默认情况下),而是迭代输入数组本身,因为 &$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'));
我正在尝试重新编辑 cookie 值。
当我不使用 &$prod
时,它不会更改数组值。
当我使用 &$prod
时,它改变了数组但我得到:
Invalid argument supplied for 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"];
}
}
}
我想你想修复整个 $arr
然后在循环之后,只更新一次 cookie。这种逻辑上直接的方法也消除了错误。
您收到错误的原因是因为您在 foreach 表达式中使用 &
并在循环中写入 $arr = json_encode($arr);
。循环不是迭代输入数组的 "copy"(默认情况下),而是迭代输入数组本身,因为 &$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'));