Bucles
for
Aquest tipus de bucle, com en d'altres llenguatges de programació s'utilitza quan sabem el numero d'iteracions necessitem (un index numèric)
<?php
// Exemple: imprimir nombres de l'1 al 5
for ($i = 1; $i <= 5; $i++) {
echo $i . " ";
}
// Sortida: 1 2 3 4 5
while
<?php
$n = 1;
while ($n <= 5) {
echo $n . " ";
$n++;
}
// Sortida: 1 2 3 4 5
do...while
<?php
$n = 10;
do {
echo "Executat almenys una vegada\n";
} while ($n < 5);
// Sortida: Executat almenys una vegada
foreach
Aquest resulta ideal per recórrer arrays i objectes iterables, resulta la forma més comuna d'iterar un array sobretot quan treballem amb bases de dades.
<?php
$fruites = ["poma", "pera", "plàtan"];
// Només valors
foreach ($fruites as $fruita) {
echo $fruita . " ";
}
// Sortida: poma pera plàtan
$n_elements = count ($fruites);
for ($i=0;$i<$n_elements;$i++)
{
echo $fruites[$i] . " ";
}
// Sortida: poma pera plàtan
// Claus i valors (arrays associatius)
$usuari = ["nom" => "Anna", "edat" => 28];
foreach ($usuari as $clau => $valor) {
echo "$clau: $valor\n";
}
// Sortida:
// nom: Anna
// edat: 28
foreach (array associatiu)
El bucle foreach a PHP és una eina útil per recórrer fàcilment els elements d'un array, ja sigui indexat (cas anterior) o associatiu. A diferència d'un bucle for tradicional, no necessites mantenir un comptador ni conèixer la grandària de l'array per avançat. Simplement, itera sobre cada element de l'array, de principi a fi.
Els foreach resulten especialment útils quan treballes amb arrays associatius ja que permet accedir tant a la clau com al valor de cada parell.
<?php
$edats = array("Pere" => 35, "Anna" => 28, "Joan" => 42);
foreach ($edats as $nom => $edat) {
echo "L'edat de " . $nom . " és " . $edat . " anys.<br>";
}
// Sortida:
// L'edat de Pere és 35 anys.
// L'edat de Anna és 28 anys.
// L'edat de Joan és 42 anys.
Arrays associatius
Els arrays associatius són arrays on els elements s'identifiquen mitjançant una clau (key), que pot ser una cadena de text o un nombre, en lloc d'un índex numèric. Aquesta estructura és perfecta per guardar dades on cada valor té un nom o una etiqueta descriptiva.
El foreach amb la sintaxi de clau i valor és la manera ideal de processar aquest tipus d'arrays. La clau ($nom a l'exemple anterior) et serveix per identificar l'element, i el valor ($edat) és la dada que hi ha associada.
<?php
$ciutats_paissos = [
"París" => "França",
"Tòquio" => "Japó",
"Barcelona" => "Espanya",
"Nova York" => "EUA"
];
echo "<h3>Ciutats i països:</h3>";
//*****************************************
// foreach ( $coleccio as $clau => $valor)
//*****************************************
foreach ($ciutats_paissos as $ciutat => $pais) {
echo "La ciutat de **" . $ciutat . "** es troba a **" . $pais . "**.<br>";
}
// Sortida:
// La ciutat de París es troba a França.
// La ciutat de Tòquio es troba a Japó.
// La ciutat de Barcelona es troba a Espanya.
// La ciutat de Nova York es troba a EUA.
foreach per referència (modificar l'array)
<?php
$nums = [1, 2, 3];
foreach ($nums as &$n) {
$n *= 2; // modifica l'array original
}
unset($n); // IMPORTANT: trencar la referència per evitar efectes laterals
print_r($nums);
// Sortida: Array ( [0] => 2 [1] => 4 [2] => 6 )
Atenció: després d’un foreach amb referencia sempre fes unset($varReferencia) per evitar que la variable segueixi apuntant a l’últim element.
Bucles anidats
<?php
// Taula de multiplicar 1..3
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
echo $i * $j . " ";
}
echo PHP_EOL;
}
// Sortida:
// 1 2 3
// 2 4 6
// 3 6 9
Sintaxi embedida
Per quan barreges HTML i PHP (for: / endfor;, / foreach: / endforeach;, while : / endwhile;, if: / endif;):
<?php $items = ["a","b","c"]; ?>
<ul>
<?php foreach ($items as $item): ?>
<li><?= $item ?></li>
<?php endforeach; ?>
</ul>