Может ли isset использоваться в условии цикла for? - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь получить номера, которые не уже записаны в жилую квартиру, короткую: RA .Так что, пока array_shift перетаскивает комнаты из массива, цикл должен рассчитывать дальше, и он должен проверять allRARooms, если для меня еще осталось несколько комнат.

Так что все в порядке, чтобы проверить isset в для условия ?

for($i = 1; count($ra) <= $quantity && isset($this->allRARooms); $i++)

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Да, вы можете установить for условие завершения цикла на любое выражение, которое вам нравится.
Вы даже можете пропустить это!например:

for ($i=0;;$i++) {
 if ($i>10) break; 
 echo "$i\n";
}

Или, может быть, вы хотите вечный цикл с for?вот оно:

for (;;) echo ++$x . "\n";

По сути, вы можете пропустить любую часть цикла for, в которой вы нуждаетесь

Оптимизация условия

Ваше условие count($ra) <= $quantity && isset($this->allRARooms) может быть немного учтено.

  1. В 99% случаев достаточно count($ra) <= $quantity && $this->allRARooms, потому что '',null,[] - все оценивается как false.
  2. Далее вы должны поставить allRARooms varпроверьте в первую очередь, как:
    $this->allRARooms && count($ra) <= $quantity.Таким образом, вы будете использовать трюк для оценки короткого замыкания для повышения скорости проверки состояния, потому что, если var allRARooms не установлен - count ($ ra) не будет оцениваться - таким образом экономитсяТики процессора
0 голосов
/ 15 февраля 2019

Да, это так.

A for цикл можно описать так: for (initialisation; alive condition; last loop statement)

его можно перевести с помощью цикла while следующим образом:

initialisation
while (alive condition)
{
    // some code

    last loop statement
}

Вы ставите то, что хотите, при условии, что он учитывает операторы diffts

for($i = 1; count($ra) <= $quantity && isset($this->allRARooms); $i++) {  }

эквивалентен

$i = 1;
while (count($ra) <= $quantity && isset($this->allRARooms))
{
    // some code

    $i++;
}

Вы можете добавить много операторов инициализации и последней инструкции и условие liveможет быть независимым от них.

$aConditionIndependantOfInit = true;
for ($i = 0, $j = 42; $aConditionIndependantOfInit; $i++, $j--)
{
    echo "foo\n";
    if ($i >= $j)
        $aConditionIndependantOfInit = false;
}

Этот вывод 21 foo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...