W3docs

while

In PHP, la parola chiave "while" crea un ciclo che esegue un blocco di codice ripetutamente finché una condizione rimane vera.

Il ciclo while in PHP

Il ciclo while è il ciclo più semplice in PHP. Esegue un blocco di codice più e più volte finché una condizione rimane vera, e si interrompe nel momento in cui quella condizione diventa falsa. Usalo quando non sai in anticipo quante iterazioni saranno necessarie — ad esempio, leggere righe da un database finché non ce ne sono più, o ripetere un'operazione finché non riesce.

Questa pagina tratta la sintassi di while, la forma alternativa con endwhile, le differenze tra while e do...while, e l'errore più comune — il ciclo infinito — e come evitarlo.

Sintassi

while (condition) {
  // Code to be executed while the condition is true
}

La condizione viene valutata prima di ogni iterazione:

  1. PHP controlla la condition.
  2. Se è true, il corpo viene eseguito una volta, poi PHP torna al passo 1.
  3. Se è false, il ciclo termina e l'esecuzione continua dopo la parentesi graffa di chiusura.

Poiché il controllo avviene prima, il corpo può essere eseguito zero volte — se la condizione è già falsa al primo controllo, il corpo del ciclo viene saltato completamente.

Sintassi alternativa con endwhile

PHP offre anche una forma con i due punti e endwhile, utile quando si mescolano cicli con HTML in un template:

<?php $i = 1; ?>
<ul>
<?php while ($i <= 3): ?>
  <li>Item <?= $i ?></li>
  <?php $i++; ?>
<?php endwhile; ?>
</ul>

Entrambe le forme si comportano in modo identico; scegli quella che risulta più leggibile nel contesto.

Utilizzo

La parola chiave "while" viene comunemente usata nella programmazione PHP per creare cicli che ripetono un blocco di codice fino a quando una certa condizione è soddisfatta. Ad esempio, potresti usare un ciclo "while" per iterare sugli elementi di un array:

Esempio della parola chiave while in PHP

php— editable, runs on the server

In questo esempio, il ciclo "while" viene usato per iterare sugli elementi dell'array $myArray. La variabile $i viene usata per tenere traccia dell'indice corrente nell'array, e il ciclo continua a eseguirsi finché $i è minore del numero di elementi nell'array. All'interno del ciclo, usiamo l'istruzione echo per stampare l'elemento corrente dell'array, e poi incrementiamo $i per passare all'elemento successivo.

Esempi

Ecco altri esempi di come il ciclo while può essere usato nella programmazione PHP.

Esempio 1: Generare un numero casuale finché una certa condizione è soddisfatta

php— editable, runs on the server

In questo esempio, usiamo un ciclo "while" per generare numeri casuali finché non otteniamo un numero maggiore o uguale a 10. All'interno del ciclo, generiamo un numero casuale usando la funzione rand() e lo stampiamo usando l'istruzione echo. Continuiamo a generare numeri casuali e a stamparli finché non otteniamo un numero maggiore o uguale a 10.

Esempio 2: Iterare su un result set di un database

Iterare su un result set di un database in PHP

<?php

$query = "SELECT * FROM my_table";
$result = mysqli_query($conn, $query);

while ($row = mysqli_fetch_assoc($result)) {
  echo $row['column_name'] . "<br>";
}

In questo esempio, usiamo un ciclo while per iterare sul result set restituito da una query al database. La funzione mysqli_fetch_assoc() restituisce la riga successiva come array associativo, o false quando non ci sono più righe — quindi il ciclo si interrompe automaticamente quando il result set è esaurito. Questo funziona perché l'assegnazione $row = mysqli_fetch_assoc($result) restituisce il valore assegnato, e false termina il ciclo.

Evitare il ciclo infinito

L'errore più comune con while è dimenticare di modificare la variabile da cui dipende la condizione. Se la condizione non diventa mai falsa, il ciclo gira all'infinito e blocca lo script:

<?php

$i = 0;

// Bug: $i is never incremented, so $i < 5 stays true forever.
while ($i < 5) {
  echo "running...\n";
  // $i++;  <-- this line is missing
}

Assicurati sempre che qualcosa all'interno del ciclo faccia avanzare la condizione verso false. Puoi anche uscire anticipatamente con break, oppure saltare il resto dell'iterazione corrente con continue.

while vs do...while

Un ciclo while controlla la condizione prima di eseguire il corpo, quindi il corpo potrebbe essere eseguito zero volte. Un ciclo do...while controlla la condizione dopo il corpo, quindi il corpo viene sempre eseguito almeno una volta:

<?php

$i = 10;

// Condition is false from the start, so this prints nothing.
while ($i < 5) {
  echo "while: $i\n";
  $i++;
}

// do...while runs the body once before checking, so it prints "do-while: 10".
do {
  echo "do-while: $i\n";
  $i++;
} while ($i < 5);

Usa do...while quando il corpo del ciclo deve essere eseguito almeno una volta (ad esempio, chiedere input a un utente finché non fornisce un valore valido).

Conclusione

Il ciclo while esegue un blocco di codice finché la sua condizione è vera, verificando tale condizione prima di ogni passaggio. Usalo quando il numero di iterazioni non è noto in anticipo, proteggiti dai cicli infiniti aggiornando la condizione all'interno del corpo, e scegli do...while quando il corpo deve essere eseguito almeno una volta.

Per esplorare altri modi di ripetere codice in PHP, consulta il ciclo for (ideale quando conosci il numero di iterazioni) e il ciclo foreach (ideale per scorrere gli array). Per un confronto generale di tutti i cicli, leggi la panoramica sui cicli PHP.

Pratica

Pratica
Qual è la sintassi per un ciclo 'while' in PHP?
Qual è la sintassi per un ciclo 'while' in PHP?
Was this page helpful?