通过使用&获取为foreach()提供的无效参数

时间:2018-02-22 21:23:05

标签: php loops cookies pass-by-reference

我正在尝试重新编辑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"];
        }
    }
}

1 个答案:

答案 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'));