为什么for循环单独处理每个条件,而第一个条件放在一起并不重要?
for ($j = 0; $j < 5 or $j < $synCount; $j++)
我只想循环运行五次
或
如果synCount小于此。
您的意思可能是"$j
低于5和$j
低于$sysCount
",或者:
$j < min(5, $sysCount)
非常简单的
$j < min(5, $sysCount)
您可以使用break
语句来离开for循环:
for ($j = 0; $j < 5 ; $j++)
{
if( $j >= $synCount )
break;
//treatment
}
或者在循环之前计算您的限额:
$ max = $synCount < 5 ? $synCount : 5;
for ($j = 0; $j < $synCount ; $j++)
{
//treatment
}
另一个最快的解决方案:使用min()
:
for ($j = 0; $j < min(5, $synCount) ; $j++)
{
//treatment
}
这样试试:
$loopcount = ($syncount < 5) ? $syncount : 5;
for ($j = 0; $j < $loopcount; ++$j) {
}
第一行确定$syncount
是否小于5,然后基于该值将值分配给$loopcount
。然后循环运行所需的次数。
for ($j = 0; $j < ($syncCount <= 5 ? $syncCount : 5); $j++)
或者稍微优化(但我想5次或更少的迭代,这个绝对无关紧要)
for ($j = 0, $limit = min($syncCount, 5); $j < $limit; $j++)
另一个不错的解决方案
foreach (range(0, min($syncCount, 5)) as $j)
旁注
$syncCount <= 5 ? $syncCount : 5 == min($syncCount, 5)
$productsprice=ProductPrice::model()->findAllByAttributes(array ('product_id'=>$products_data->product_id));
foreach($productsprice AS $productsprice):
for($quantity = 0; $quantity <= 10; $quantity++)
{
echo '<li >'.array(value=>'ProductPrice::model()->getquantity($data->quantity)').'</li>' ;
}
endforeach;
使用逻辑运算符确实可以在for
循环中应用两个条件。例如,检查状态直到正常
for($i = 0; $i < 100 && $status != 'ok'; $i++){
sleep(1);
$status = checkStatus();
}
否则,您需要使用附加的if表达式和break
for($i = 0; $i < 100; $i++){
sleep(1);
$status = checkStatus();
if($status == 'ok') break;
}