2009-07-23 8 views
21

è possibile farlo? (Ecco il mio codice)Php per loop con 2 variabili?

for ($i = 0 ; $i <= 10 ; $i++){ 
    for ($j = 10 ; $j >= 0 ; $j--){ 
    echo "Var " . $i . " is " . $k . "<br>"; 
    } 
} 

voglio qualcosa di simile:

var 0 è 10

var 1 è 9

var 2 a 8 ...

Ma il mio codice è sbagliato, dà una lista enorme. Php guru, aiutami !!

risposta

51

Prova questa:

for ($i=0, $k=10; $i<=10 ; $i++, $k--) { 
    echo "Var " . $i . " is " . $k . "<br>"; 
} 

Le due variabili $i e $k vengono inizializzati con rispettivamente 0 e 10. Alla fine di ciascun ciclo, $i verrà incrementato di uno ($i++) e $k decrementato di uno ($k--). Così $i avranno i valori 0, 1, ..., 10 e $k i valori 10, 9, ..., 0.

+6

+1 - non sapevo nemmeno di poterlo fare! –

+0

Oh wow. Non avevo idea di impostare più vars all'interno di un ciclo for. Bello. – Sampson

+0

Dato cosa significa la sintassi di un ciclo for, ha senso ... –

1

Si consiglia di non utilizzare due per-loop per quello che si desidera raggiungere, come si' re looping 121 volte totale (11x11). Quello che vuoi veramente è solo avere un contatore dichiarato al di fuori del loop che tiene traccia di j, e quindi decrementare j all'interno del loop.

Modifica: Grazie Gumbo per aver incluso l'inclusione per me.

+0

In effetti è 11 · 11 = 121 (da 0 a 10 inclusi). – Gumbo

+0

Ah, sì, non l'ho nemmeno visto. – AlbertoPL

0

Per espandere le altre risposte (corrette), ciò che si stava facendo si chiama cicli di nidificazione. Ciò significa che per ogni iterazione del ciclo esterno (il primo), stavi completando l'intero ciclo interno. Ciò significa che invece di 11 uscite, si ottiene 11 + 11 + 11 + ... = 11 * 11 uscite

1

Se, come il codice sia, ci sono due valori in esecuzione nella direzione opposta si potrebbe semplicemente sottrarre:

echo "Var " . $i . " is " . 10 - $i . "<br>"; 

Ma immagino che non è proprio ciò che vuoi? Inoltre, fai attenzione con lo comma operator suggerito. Mentre è una cosa carina può causare effetti collaterali cattivi in ​​altre lingue come C and C++ come PHP lo implementa in modo diverso.

0
array_map(function($i) { 
    echo "Var {$i} is ".(10-$i)."<br/>".PHP_EOL; 
}, range(1,10)); 
1

Si potrebbe anche aggiungere una condizione per la seconda variabile

for ($i=0, $k=10; $i<=10, $k>=0 ; $i++, $k--) { 
    echo "Var " . $i . " is " . $k . "<br>"; 
} 
0

Ho cercato di ottenere un tempo di inizio e di fine e conservare nel database, dato un inizio e di fine, si esegue un ciclo attraverso ogni tempo utilizzando due variabili i & j

$start = "09:00"; 
    $end = "18:00"; 
    $strEnTim = strtotime("10.00"); 

    $slotStart = strtotime($start); 
    $slotEnd = strtotime($end); 
    $slotNow = $slotStart; 

    for($i=$slotStart, $j=$strEnTim; $i, $j<=$slotEnd; $i+=3600, $j+=3600) 
    { 
     if(($i < $slotNow) && ($j < $strEnTim)) continue; 
     Slot::create([ 
      'start_time' => date("H:i",$i), 
      'end_time' => date("H:i", $j) 
     ]); 
    }