debug 2.0

Cicli

[ php ]

Cos'è un ciclo? A cosa serve? Per ciclo, in programmazione, si intende un sistema che esegue un certo tipo di operazione (una o più) sistematicamente fino al verificarsi di una situazione definita implicitamente o esplicitamente. Le strutture dei cicli sono varie, ecco quelle del php (comuni anche molti altri linguaggi): while do … while for foreach L'immancabile esempio: vogliamo stampare una lista di nomi, avendo quest'ultimi inseriti in un array (ne abbiamo parlato qui). Quindi abbiamo il nostro array di nomi:
$nomi=array("Franco","Maria","Giorgio","Anna");
Usiamo il ciclo for:
for($k=0; $k<count($nomi); $k++){
echo $nomi[$k] ."<br>";
}
Analizzando lo script qui sopra, vediamo che oltre al ciclo incontriamo anche altri metodi già affrontati in precedenti lezioni. Vi rimando a quest'ultime se non doveste riuscire a capire appieno la loro funzionalità. La sintassi del ciclo for: gli argomenti all'interno delle parentesi tonde sono 3. Il primo inizializza una variabile definendo il suo valore (nel nostro esempio zero). Il secondo è la situazione che fa proseguire il ciclo quando questo risulti FALSE, quindi quando questo non si verifichi. Il terzo dice cosa fare ad ogni "passata", cioè ogni volta che il ciclo effettua la sua funzione. In parole spicciole si potrebbe semplificare la funzione del ciclo for in questo modo: la var $k all'inizio è 0; esegui il ciclo finchè $k è minore della lunghezza dell'array $nomi; incrementa $k di una unità. Piuttosto semplice ora, vero? Ora vediamo il ciclo while. La sintassi del ciclo while prevede un solo argomento. Esempio:
while($k<count($nomi)){
echo $nomi[$k] . "<br>";
$k++;
}
Ho riportato volutamente l'esempio della situazione di prima per farvi comprendere meglio come sia possibile ottenere il medesimo risultato con tecniche differenti. Ma abbiamo accennato anche ad un certo do … while, vediamo di cosa si tratta. E' evidente la somiglianza con il fratello while, la differenza risiede infatti solo nella sintassi, più in particolare nell'ordine dell'argomento e delle azioni da eseguire.
do{
echo $nomi[$k] . "<br>";
$k++;
} while($k<count($nomi));
Come vedete in questo caso si dichiara prima cosa fare e poi la condizione necessaria per soddisfare il ciclo. E' la volta del foreach. Anche in questo caso notiamo una certa somiglianza con il già discusso for. Diciamo piuttosto che foreach è la fusione di due elementi: for e each. Il primo lo abbiamo conosciuto qualche riga più su; each invece è uno sconosciuto. Siamo nuovamente di fronte ad una funzione riguardante gli array. Each infatti restituisce la corrente coppia chiave/valore di un certo array, incrementandone il puntatore interno, leggendo quindi l'elemento successivo. Calma, ecco una spiegazione pratica di quello che sto dicendo. Volendo usare each su un array avremmo:
$mio_array=array("uno","due","tre");
$mio_secondo_array=each($mio_array);
print_r($mio_secondo_array);
Each resituisce un ulteriore array composto da 4 elementi: 0, 1, key e value. 0 e key rappresentano la chiave dell'array su cui si è usato each, 1 e value invece contengono il valore. Con l'esempio precedente otterremmo:
Array ( [1] => uno [value] => uno [0] =>>0 [key] => 0 )
Vi ritrovate no? Non andiamo troppo lontano, questo era per capire per cosa nasce each. Per la nostra lezione dobbiamo capire come può aiutarci a restituire una lista di nomi. Per fare questo tipo di operazioni viene usato insieme alla funzione list, in questo modo:
while(list($chiave, $valore) = each($nomi)){
echo "$chiave -> $valore <br>";
}
Analizziamo. List assegna a 2 variabili ( $chiave e $valore ) ciò che restituisce each applicato all’array $nomi. Quindi utilizzando questa struttura riusciamo ad ottenere qualcosa del genere:
0 -> Franco
1 -> Maria
2 -> Giorgio
3 -> Anna
Quindi è comprensibile che di volta in volta (quindi ad ogni "ciclo", per l'appunto) $chiave e $valore assumono valori diversi, attraversando in questo modo tutto l'array dato. Un po' complicato, lo riconosco… Ecco che ci viene in aiuto, finalmente, foreach! Lo script dell'ultimo esempio può essere sostituito dal più snello:
foreach($nomi as $chiave => $valore){
echo "$chiave -> $valore <br>";
}
Il risultato? Identico. Ovviamente l'uso di un ciclo in luogo di un altro è dipendente dalle diverse situazioni e dalle diverse esigenze che ogni lavoro comporta.

scritto il 08/09/2005

« torna agli articoli

Sondaggio

Internet Mobile...





Ads

Web News

Friends

Jam
Makpaolo
Ceptive
Piero Ricca.org
tutorialweb
AG web wolutions

Bookmarks