我正在尝试将尚未被未写入的房间简称为 RA 。因此,只要array_shift将房间拖出阵列,则循环应该进一步计数,并且必须检查allRARooms是否还有剩余房间供我使用。
是否可以在条件中检查是否已设置?
for($i = 1; count($ra) <= $quantity && isset($this->allRARooms); $i++)
答案 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)
可以被分解。
count($ra) <= $quantity && $this->allRARooms
就足够了,因为'',null,[]
-全部取值为false
。$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