2012-07-20 14 views
5

Perché questo ciclo funziona singolarmente con ciascuna condizione, ma insieme la prima condizione non ha importanza?Due condizioni in un ciclo for

for ($j = 0; $j < 5 or $j < $synCount; $j++) 

Voglio solo la corsa ad anello cinque volte

o

se synCount è inferiore a questo.

risposta

12

Probabilmente si intende "$j unde r 5 e$j sotto $sysCount", oppure:

$j < min(5, $sysCount) 
+0

non sapeva di questa funzionalità. Più elegante della mia soluzione, bella! – hellsgate

+0

Bello! Grazie mille. – flux

0

È possibile youse la dichiarazione break di lasciare il ciclo for:

for ($j = 0; $j < 5 ; $j++) 
{ 
    if($j >= $synCount) 
     break; 
    //treatment 
} 

o calcolare il limite prima del ciclo:

$ max = $synCount < 5 ? $synCount : 5; 
for ($j = 0; $j < $synCount ; $j++) 
{ 
    //treatment 
} 

Un'altra soluzione, più veloce: utilizzare min():

for ($j = 0; $j < min(5, $synCount) ; $j++) 
{ 
    //treatment 
} 
0

Prova così:

$loopcount = ($syncount < 5) ? $syncount : 5; 
for ($j = 0; $j < $loopcount; ++$j) { 
} 

La prima linea determina se $syncount è minore di 5 o meno e quindi assegna un valore a $loopcount basato su quello. Quindi il ciclo esegue il numero richiesto di volte.

0
for ($j = 0; $j < ($syncCount <= 5 ? $syncCount : 5); $j++) 

o leggermente ottimizzata (ma immagino con 5 o meno iterazioni questo assolutamente non importa)

for ($j = 0, $limit = min($syncCount, 5); $j < $limit; $j++) 

anothe belle soluzioni

foreach (range(0, min($syncCount, 5)) as $j) 

Sidenote

$syncCount <= 5 ? $syncCount : 5 == min($syncCount, 5) 
2

molto semplice

$j < min(5, $sysCount) 
0
$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; 
+1

Aggiungi alcuni dettagli sulla tua risposta. – emmanuel