for ($i = 0; $i < 5; $i++) { ... } esegue il blocco un numero fisso di volte. Le tre parti sono l'inizio ($i = 0, eseguito una volta), la condizione ($i < 5, verificata prima di ogni passaggio) e l'incremento ($i++, eseguito dopo ogni passaggio). Il ciclo termina appena la condizione è falsa.
$i esiste ancora dopo il ciclo e contiene il valore che ha reso falsa la condizione (6). PHP non ha uno scope di blocco per le variabili dei cicli.
Scorrere un array con un indice
Per una lista con chiavi 0, 1, 2 ..., il contatore fa anche da indice. Salva prima count() in una variabile, così non viene chiamato di nuovo a ogni passaggio.
La prima parte può contenere più espressioni separate da virgole, ed è così che $n = count($fruits) viene impostato una volta sola. Quando ti serve solo ogni valore (e non i suoi vicini), foreach è più breve e funziona anche sugli array le cui chiavi non vanno da 0 a n - 1.
Contare all'indietro e avanzare di più di 1
L'incremento può essere qualsiasi espressione: $i-- per contare all'indietro, $i += 2 per un numero sì e uno no, $i *= 2 per le potenze di due.
range('a', 'h') costruisce l'array ['a', 'b', ... 'h']. Con range(1, 10) e foreach ottieni lo stesso conteggio di un ciclo for, al costo di costruire prima l'intero array.
break e continue
break termina subito il ciclo. continue salta il resto del passaggio corrente e passa all'incremento e al controllo successivo della condizione.
Il secondo ciclo ha una condizione vuota, che significa "sempre vero", quindi gira fino al break. Nei cicli annidati, break 2 e continue 2 agiscono sul ciclo esterno, come mostra l'esempio seguente.
Cicli for annidati: la tavola pitagorica
Un ciclo dentro un ciclo esegue il ciclo interno per intero a ogni passaggio di quello esterno. Qui l'output è HTML, quindi la scheda Page mostra una vera tabella.
Cambia $size in 12 ed eseguilo di nuovo. La forma for (...): ed endfor; è la sintassi alternativa che mantiene leggibili i cicli tra i tag HTML. La stessa tabella costruita come testo semplice, e con break 2 per fermare entrambi i cicli:
Errori comuni: uno in più e il ciclo infinito
I due bug classici del for: usare <= con count() legge un elemento oltre la fine, che PHP segnala come Warning: Undefined array key 3 e tratta come null; e un incremento che non porta mai il contatore verso la fine ($i-- quando intendevi $i++) mantiene la condizione vera per sempre.
Per i cicli di cui non puoi conoscere la durata in anticipo, come leggere fino alla fine di un file, è più adatto un ciclo while.
Domande frequenti
Come scorro un array con un indice in PHP?
Per una lista con chiavi 0, 1, 2 usa for ($i = 0; $i < count($arr); $i++) { echo $arr[$i]; }. Nella maggior parte del codice foreach ($arr as $i => $value) è più semplice, dà lo stesso indice e funziona anche quando le chiavi non vanno da 0 a n meno 1.
Come esco da un ciclo for in PHP?
break; esce subito dal ciclo. Nei cicli annidati, break 2; esce dal ciclo interno e da quello che lo contiene. continue; salta il resto del passaggio corrente e passa al successivo.
Come conto all'indietro con un ciclo for in PHP?
Parti dal valore alto, confronta con >= e decrementa: for ($i = 10; $i >= 1; $i--) { echo $i; }. Per passi diversi da uno, cambia la terza parte, per esempio $i += 2 o $i -= 5.
Quando usare for invece di foreach in PHP?
Usa for quando conti qualcosa (ripetere 5 volte, i numeri da 1 a 100, un elemento sì e uno no) o ti serve l'elemento successivo o precedente tramite indice. Usa foreach per visitare ogni elemento di un array, soprattutto degli array associativi, dove non c'è un indice numerico.