通过使用&为foreach()提供无效参数
我正在尝试重新编辑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"];
}
}
}
我想你想修复整个$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'));
链接地址: http://www.djcxy.com/p/53067.html
上一篇: Getting Invalid argument supplied for foreach() by using &
下一篇: Invalid argument supplied for foreach(),no proper solution found