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