Ошибки с json_decode, массивом и foreach

0

Я использую этот код для Virtuemart:

$product_id_to_remove = 3;
$cart = json_decode($_SESSION['__vm']['vmcart']);
foreach($cart->cartProductsData as $k => $v){
  if($v->virtuemart_product_id == $product_id_to_remove) unset($cart->cartProductsData[$k]);
}
$_SESSION['__vm']['vmcart'] = json_encode($cart);

но я получаю фатальную ошибку: не могу использовать объект типа stdClass как массив в строке... 4. Если я добавлю true в json_decode ($ _ SESSION ['__ vm'] ['vmcart']), я получаю предупреждение: недопустимый аргумент foreach().

Как решить проблему?

ps Я новичок в php и вообще не знаю json_. Код предлагается по ссылке: qaru.site/questions/9749002/...

  • 0
    Если вы используете true для второго параметра, вам нужно обратиться к $cart['cartProductsData'] как он возвращает ассоциативный массив, а не класс.
  • 0
    Попробуйте foreach(get_object_vars($cart->cartProductsData) as $k => $v)
Показать ещё 9 комментариев
Теги:
arrays
foreach

1 ответ

1
Лучший ответ

$cart->cartProductsData ведет себя как массив, но на самом деле объект

попробуйте это: измените

unset($cart->cartProductsData[$k])

в

unset($cart->cartProductsData->$k)
  • 0
    К сожалению, есть одна проблема: если я заменю [$ k] на -> $ k, продукт удаляется, но через некоторое время нет, поэтому я заменяю обратно -> $ k на [$ k], и удаление снова работает, но через некоторое время я получаю ошибку stdClass ', затем я заменяю [$ k] на -> $ k снова и круг закрывается
  • 1
    Вероятно, это связано с наличием одного или нескольких товаров в корзине. Добавьте проверку, чтобы видеть, является ли это только одним объектом или массивом объектов.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню