Oltre al ciclo for esistono altri due tipi di cicli molto interessanti
I cicli While e Do-while sono due cicli che, al contrario del ciclo For, permettono di iterare una porzione di codice per un numero di volte calcolato all’interno del ciclo stesso.
Tornando sull’esempio del fattoriale, adesso utilizzeremo il ciclo while per sapere qual è il fattoriale di un numero il cui risultato è il più valore più piccolo dopo il numero 5000
<?php $ris = 1;/ $mult = 0;/ while (true)/ while ($ris <= 5000) {/ $mult++; $ris = $ris * $mult;/ echo "Il fattoriale di $mult è $ris<br>"; / }/ echo "Fine del codice"; ?>
questo codice stamperà il seguente risultato
Il fattoriale di 1 è 1
Il fattoriale di 2 è 2
Il fattoriale di 3 è 6
Il fattoriale di 4 è 24
Il fattoriale di 5 è 120
Il fattoriale di 6 è 720
Il fattoriale di 7 è 5040
Fine del codice
Il ciclo while eseguirà quel blocco di codice finché la condizione sarà vera, cioé finché la variabile $ris non supererà il valore di 5000. Ciò significa che se, prima di entrare nel ciclo la variabile $ris avrà già un valore superiore a 5000, il ciclo non sarà eseguito
<?php $ris = 1;/ $mult = 0;/ $ris = 5001;/ forziamo il valore a 5001/ while (true)/ while ($ris <= 5000) {/ $mult++;/ $ris = $ris * $mult;/ echo "Il fattoriale di $mult è $ris<br>";/ }/ echo "Fine del codice"; ?>
stamperà il seguente risultato
Fine del codice
Il ciclo Do-while, invece, agisce in maniera leggermente differente. Se volessimo scrivere la stessa iterazione con questo ciclo
<?php $ris = 1;/ $mult = 0;/ do {/ $mult++;/ $ris = $ris * $mult;/ echo "Il fattoriale di $mult è $ris<br>"; / } while ($ris <= 5000); do-while (true)/ echo "Fine del codice"; ?>
otterremmo lo stesso primo risultato
Il fattoriale di 1 è 1/ Il fattoriale di 2 è 2/ Il fattoriale di 3 è 6/ Il fattoriale di 4 è 24/ Il fattoriale di 5 è 120/ Il fattoriale di 6 è 720/ Il fattoriale di 7 è 5040/ Fine del codice
ma se invece forzassimo il valore di $ris a 5001 come abbiamo fatto prima
<?php $ris = 1;/ $mult = 0;/ $ris = 5001;/ forziamo il valore a 5001/ do {/ $mult++;/ $ris = $ris * $mult;/ echo "Il fattoriale di $mult è $ris<br>";/ } while ($ris <= 5000); do-while (true)/ echo "Fine del codice"; ?>
il risultato ottenuto sarà diverso
Il fattoriale di 1 è 5001/ Fine del codice
questo perché il While esegue un controllo condizionale in testa, e se la condizione non è verificata allora il ciclo non avverrà nemmeno una volta. Il Do-while invece esegue il controllo della condizione in coda, ciò significa che se la condizione non è verificata il ciclo sarà comunque eseguito almeno una volta.