Почему мой do-while? Do & quot; строка выполняется дважды перед & quot; в то время как & quot;

Когда я выполняю код ниже, 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
);

1

Решение

Если $ allitems имеет один элемент, он вытолкнет этот элемент, оставив счетчик равным 0. Ваше время говорит, что нужно продолжать выдавать, пока счетчик равен 0, поэтому он появляется снова, но все элементы пустые. Это не удается. Вы получаете нулевое значение и затем пытаетесь использовать NULL-> getProductID (). Вам нужно изменить сравнение на:

$item->getProductId() != $product->getId() && count($allItems) > 0

Это будет работать, пока у $ allitems все еще есть элементы для добавления.

1

Другие решения

Вы просто должны удалить знак равенства из вашего условия while count($allItems) <= 0, Потому что сначала у вас есть один элемент, который уменьшит количество до 0 после одной итерации, но это не вызовет ваше время, поэтому он сделает вторую итерацию.

Другой возможностью было бы переключиться на цикл while, чтобы он проверял условие перед выполнением вашего кода.

1

По вопросам рекламы [email protected]