Почему моя строка do-while «do» выполняется дважды перед «while»

1

Когда я выполняю код ниже, строка 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
    $ item имеет только одно значение?
  • 2
    Если $ allitems имеет один элемент, он вытолкнет этот элемент, оставив счетчик равным 0. Ваше время говорит, что нужно продолжать выдавать, пока счетчик равен 0, поэтому он появляется снова, но все элементы пустые. Это не удается. Вы получаете нулевое значение и затем пытаетесь использовать NULL-> getProductID ().
Показать ещё 1 комментарий
Теги:
do-while

2 ответа

1
Лучший ответ

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

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

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

1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню