Ricerca…
introduzione
I loop sono un aspetto fondamentale della programmazione. Consentono ai programmatori di creare codice che si ripete per un dato numero di ripetizioni o iterazioni . Il numero di iterazioni può essere esplicito (6 iterazioni, per esempio), o continuare fino a quando non viene soddisfatta una condizione ('finché Hell non si blocca').
Questo argomento copre i diversi tipi di loop, le relative dichiarazioni di controllo associate e le loro potenziali applicazioni in PHP.
Sintassi
- per (contatore init, contatore test, contatore incrementale) {/ * codice * /}
- foreach (array come valore) {/ * code * /}
- foreach (array come chiave => valore) {/ * codice * /}
- while (condizione) {/ * codice * /}
- do {/ * code * /} while (condizione);
- anyloop {continua; }
- anyloop {[ anyloop ...] {continue int; }}
- anyloop {break; }
- anyloop {[ anyloop ...] {break int; }}
Osservazioni
È spesso utile eseguire più volte lo stesso o simile blocco di codice. Anziché eseguire il copia-incolla, i cicli di istruzioni quasi uguali forniscono un meccanismo per eseguire codice un numero specifico di volte e camminare su strutture dati. PHP supporta i seguenti quattro tipi di loop:
-
for
-
while
-
do..while
-
foreach
Per controllare questi loop, sono disponibili le istruzioni continue
e break
.
per
L'istruzione
for
viene utilizzata quando sai quante volte vuoi eseguire una dichiarazione o un blocco di istruzioni.
L'inizializzatore viene utilizzato per impostare il valore iniziale per il contatore del numero di iterazioni del ciclo. Una variabile può essere dichiarata qui per questo scopo ed è tradizionale chiamarla $i
.
L'esempio seguente esegue un'iterazione 10 volte e visualizza i numeri da 0 a 9.
for ($i = 0; $i <= 9; $i++) {
echo $i, ',';
}
# Example 2
for ($i = 0; ; $i++) {
if ($i > 9) {
break;
}
echo $i, ',';
}
# Example 3
$i = 0;
for (; ; ) {
if ($i > 9) {
break;
}
echo $i, ',';
$i++;
}
# Example 4
for ($i = 0, $j = 0; $i <= 9; $j += $i, print $i. ',', $i++);
L'output atteso è:
0,1,2,3,4,5,6,7,8,9,
per ciascuno
L'istruzione
foreach
viene utilizzata per eseguire il loop degli array.
Per ogni iterazione il valore dell'elemento corrente dell'array viene assegnato alla variabile $value
e il puntatore dell'array viene spostato di uno e nell'iterazione successiva verrà elaborato l'elemento successivo.
Nell'esempio seguente vengono visualizzati gli elementi nell'array assegnato.
$list = ['apple', 'banana', 'cherry'];
foreach ($list as $value) {
echo "I love to eat {$value}. ";
}
L'output atteso è:
I love to eat apple. I love to eat banana. I love to eat cherry.
Puoi anche accedere alla chiave / indice di un valore usando foreach:
foreach ($list as $key => $value) {
echo $key . ":" . $value . " ";
}
//Outputs - 0:apple 1:banana 2:cherry
Di default $value
è una copia del valore in $list
, quindi le modifiche apportate all'interno del ciclo non si rifletteranno in seguito in $list
.
foreach ($list as $value) {
$value = $value . " pie";
}
echo $list[0]; // Outputs "apple"
Per modificare l'array all'interno del ciclo foreach
, utilizzare l'operatore &
per assegnare $value
per riferimento. È importante unset
la variabile successivamente, in modo che il riutilizzo del $value
altrove non sovrascriva la matrice.
foreach ($list as &$value) { // Or foreach ($list as $key => &$value) {
$value = $value . " pie";
}
unset($value);
echo $list[0]; // Outputs "apple pie"
È inoltre possibile modificare gli elementi dell'array all'interno del ciclo foreach
facendo riferimento alla chiave dell'array dell'elemento corrente.
foreach ($list as $key => $value) {
$list[$key] = $value . " pie";
}
echo $list[0]; // Outputs "apple pie"
rompere
La parola chiave
break
termina immediatamente il loop corrente.
Simile all'istruzione continue
, break
interrompe l'esecuzione di un ciclo. A differenza di un'istruzione continue
, tuttavia, l' break
causa la chiusura immediata del ciclo e non esegue nuovamente l'istruzione condizionale.
$i = 5;
while(true) {
echo 120/$i.PHP_EOL;
$i -= 1;
if ($i == 0) {
break;
}
}
Questo codice produrrà
24
30
40
60
120
ma non eseguirà il caso in cui $i
è 0, il che comporterebbe un errore fatale dovuto alla divisione per 0.
L'istruzione break può anche essere utilizzata per uscire da diversi livelli di loop. Tale comportamento è molto utile quando si eseguono cicli annidati. Ad esempio, per copiare un array di stringhe in una stringa di output, rimuovendo tutti i simboli #
, fino a quando la stringa di output non è esattamente di 160 caratteri
$output = "";
$inputs = array(
"#soblessed #throwbackthursday",
"happy tuesday",
"#nofilter",
/* more inputs */
);
foreach($inputs as $input) {
for($i = 0; $i < strlen($input); $i += 1) {
if ($input[$i] == '#') continue;
$output .= $input[$i];
if (strlen($output) == 160) break 2;
}
$output .= ' ';
}
Il comando break 2
termina immediatamente l'esecuzione di entrambi gli anelli interno ed esterno.
fare mentre
L'istruzione
do...while
eseguirà un blocco di codice almeno una volta, quindi ripeterà il ciclo fintanto che una condizione è vera.
L'esempio seguente incrementerà il valore di $i
almeno una volta e continuerà ad incrementare la variabile $i
purché abbia un valore inferiore a 25;
$i = 0;
do {
$i++;
} while($i < 25);
echo 'The final value of i is: ', $i;
L'output atteso è:
The final value of i is: 25
Continua
La parola chiave
continue
interrompe l'iterazione corrente di un ciclo ma non termina il ciclo.
Proprio come l'istruzione break
, l'istruzione continue
si trova all'interno del corpo del loop. Quando viene eseguito, l'istruzione continue
fa in modo che l'esecuzione passi immediatamente al ciclo condizionale.
Nel seguente esempio, il ciclo stampa un messaggio in base ai valori di un array, ma salta un valore specificato.
$list = ['apple', 'banana', 'cherry'];
foreach ($list as $value) {
if ($value == 'banana') {
continue;
}
echo "I love to eat {$value} pie.".PHP_EOL;
}
L'output atteso è:
I love to eat apple pie.
I love to eat cherry pie.
L'istruzione continue
può anche essere utilizzata per continuare immediatamente l'esecuzione a un livello esterno di un ciclo specificando il numero di livelli di loop da saltare. Ad esempio, considera dati come
Frutta | Colore | Costo |
---|---|---|
Mela | Rosso | 1 |
Banana | Giallo | 7 |
ciliegia | Rosso | 2 |
Uva | verde | 4 |
Per fare solo torte di frutta che costano meno di 5
$data = [
[ "Fruit" => "Apple", "Color" => "Red", "Cost" => 1 ],
[ "Fruit" => "Banana", "Color" => "Yellow", "Cost" => 7 ],
[ "Fruit" => "Cherry", "Color" => "Red", "Cost" => 2 ],
[ "Fruit" => "Grape", "Color" => "Green", "Cost" => 4 ]
];
foreach($data as $fruit) {
foreach($fruit as $key => $value) {
if ($key == "Cost" && $value >= 5) {
continue 2;
}
/* make a pie */
}
}
Quando viene eseguita l'istruzione continue 2
, l'esecuzione torna immediatamente a $data as $fruit
continua il ciclo esterno e salta tutti gli altri codici (compreso il condizionale nel ciclo interno.
mentre
L'istruzione
while
eseguirà un blocco di codice se e fintanto che un'espressione di test è vera.
Se l'espressione di test è vera, verrà eseguito il blocco di codice. Dopo che il codice è stato eseguito, l'espressione di test verrà nuovamente valutata e il ciclo continuerà fino a quando l'espressione di test non risultasse falsa.
Il seguente esempio esegue iterazioni fino a quando la somma raggiunge 100 prima di terminare.
$i = true;
$sum = 0;
while ($i) {
if ($sum === 100) {
$i = false;
} else {
$sum += 10;
}
}
echo 'The sum is: ', $sum;
L'output atteso è:
The sum is: 100