是否可以在for循环的条件下使用isset?

时间:2019-02-15 12:11:35

标签: php for-loop

我正在尝试将尚未被写入的房间简称为 RA 。因此,只要array_shift将房间拖出阵列,则循环应该进一步计数,并且必须检查allRARooms是否还有剩余房间供我使用。

是否可以在条件中检查是否已设置

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

2 个答案:

答案 0 :(得分:1)

是的,您可以将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。这样,您将采用short-circuit evaluation技巧来提高条件检查速度,因为如果未设置var allRARooms -不会评估count($ ra)-从而节省了CPU滴答声

答案 1 :(得分:0)

是的。

for循环可以这样描述:for (initialisation; alive condition; last loop statement)

可以使用while循环来翻译它:

initialisation
while (alive condition)
{
    // some code

    last loop statement
}

只要尊重差异性陈述,就放您想要的东西

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

等同于

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

    $i++;
}

您可以添加许多初始化和最后一条指令语句,并且生存条件可以独立于它们。

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

此输出21 foo