通过使用&为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