当我执行下面的代码时,do{}
行执行两次,$item
保留false
,然后执行while()
检查。 $allItems
是一个对象的数组。为什么要执行两次?不应该$item
只是拿起弹出的会员并继续检查吗?
// $allItems is an array of one object
do {
$item = array_pop($allItems);
} while (
$item->getProductId() != $product->getId() || count($allItems) <= 0
);
答案 0 :(得分:1)
您只需要从while条件count($allItems) <= 0
中删除等号。因为你首先有一个项目会在一次迭代后将计数减少到0,但是这不会触发你的,所以它会进行第二次迭代。
另一种可能性是切换到while循环,以便在执行代码之前检查条件。
答案 1 :(得分:1)
如果$ allitems有一个项目,它将弹出该项目,使计数等于0.你的时间表示在count等于0时保持弹出,所以它再次弹出 - 但是allitems是空的。那失败了。您得到一个null然后尝试使用NULL-&gt; getProductID()。您需要将比较更改为:
$item->getProductId() != $product->getId() && count($allItems) > 0
当$ allitems仍然有要弹出的项目时,它会弹出。