Когда я выполняю код ниже, 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
);
Если $ allitems имеет один элемент, он вытолкнет этот элемент, оставив счетчик равным 0. Ваше время говорит, что нужно продолжать выдавать, пока счетчик равен 0, поэтому он появляется снова, но все элементы пустые. Это не удается. Вы получаете нулевое значение и затем пытаетесь использовать NULL-> getProductID (). Вам нужно изменить сравнение на:
$item->getProductId() != $product->getId() && count($allItems) > 0
Это будет работать, пока у $ allitems все еще есть элементы для добавления.
Вы просто должны удалить знак равенства из вашего условия while count($allItems) <= 0
, Потому что сначала у вас есть один элемент, который уменьшит количество до 0 после одной итерации, но это не вызовет ваше время, поэтому он сделает вторую итерацию.
Другой возможностью было бы переключиться на цикл while, чтобы он проверял условие перед выполнением вашего кода.