【问题标题】:Errors with json_decode, array and foreachjson_decode、array 和 foreach 的错误
【发布时间】:2015-03-06 09:39:02
【问题描述】:

我将此代码用于 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);

但我得到了致命错误:Cannot use type of stdClass as array in ... 第 4 行。如果我在 json_decode($_SESSION['__vm']['vmcart' ]) 我收到警告:为 foreach() 提供的参数无效

如何解决问题?

附言我是 php 的初学者,根本不知道 json_。代码由链接建议:stackoverflow.com/questions/28691203/how-to-remove-a-single-product-from-mod-virtuemart-cart

【问题讨论】:

  • 如果第二个参数使用true,则需要引用$cart['cartProductsData'],因为它返回的是关联数组而不是类。
  • 试试foreach(get_object_vars($cart->cartProductsData) as $k => $v)
  • 警告:get_object_vars() 期望参数 1 为对象,在中给出 null
  • 第 5 行是哪一行?
  • 对不起,我的意思是第 4 行:if($v->virtuemart_product_id == ...

标签: php arrays json foreach


【解决方案1】:

$cart->cartProductsData 的行为类似于数组,但它实际上是一个对象

试试这个: 改变

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

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

【讨论】:

  • 不幸的是,有一个问题:如果我将 [$k] 替换为 ->$k,该产品将被删除,但过了一会儿又不是,所以我将 ->$k 替换为 [ $k] 并再次删除工作,但过了一会儿我得到 stdClass' 错误,然后我再次将 [$k] 替换为 ->$k 并且圆圈关闭
  • 这可能是由于购物车中有一种或多种产品。添加一个检查以查看它是否只是一个对象或一组对象。
  • 谢谢,但我不太了解php。你能写出每种情况的条件吗?
  • 研究一下,你想学吧?否则我将不得不向您发送发票,以便我可以为您完成工作。搜索 is_object/is_array。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 2013-06-12
  • 2020-11-18
  • 1970-01-01
  • 2014-03-30
  • 2012-06-03
  • 2013-11-09
相关资源
最近更新 更多