W3docs

foreach

La parola chiave "foreach" è un costrutto di ciclo in PHP usato per iterare su array e oggetti. In questo articolo ne esploriamo sintassi e utilizzo.

Il ciclo foreach in PHP

foreach è il ciclo dedicato di PHP per iterare su array e object. A differenza di un ciclo for, non richiede un contatore né un indice — percorre ogni elemento automaticamente, uno alla volta, rendendolo il modo più comune e meno soggetto a errori per elaborare una collezione in PHP.

Questo capitolo tratta le due forme di foreach, l'iterazione per riferimento, il destructuring di array annidati con list(), la problematica più comune e quando preferire foreach rispetto agli altri cicli PHP.

Sintassi

foreach ha due forme.

Solo valore — quando interessa soltanto il valore di ogni elemento:

foreach ($array as $value) {
  // do something with $value
}

Chiave e valore — quando serve anche la chiave dell'array (indispensabile per gli array associativi):

foreach ($array as $key => $value) {
  // do something with $key and $value
}

Ad ogni iterazione, PHP copia l'elemento corrente in $value (e la sua chiave in $key), poi avanza all'elemento successivo fino a esaurire l'array.

Iterare un array indicizzato

php— editable, runs on the server

Iterare un array associativo

Con la forma $key => $value si ottengono entrambe le metà di ogni coppia:

<?php

$person = ["name" => "John", "age" => 30, "city" => "New York"];

foreach ($person as $key => $value) {
  echo $key . ": " . $value . PHP_EOL;
}

// Output:
// name: John
// age: 30
// city: New York

Modificare i valori per riferimento

Per impostazione predefinita $value è una copia, quindi modificarlo all'interno del ciclo non influisce sull'array originale. Aggiungendo il prefisso & si itera per riferimento e le modifiche vengono riscritte nell'array:

<?php

$prices = [10, 20, 30];

foreach ($prices as &$price) {
  $price *= 2;          // modifies the array in place
}
unset($price);          // important: break the reference

print_r($prices);

// Output:
// Array
// (
//     [0] => 20
//     [1] => 40
//     [2] => 60
// )

Attenzione: eseguire sempre unset($price) dopo un ciclo per riferimento. La variabile punta ancora all'ultimo elemento, quindi un'assegnazione successiva a $price — o un secondo foreach che riusa lo stesso nome — corromperebbe silenziosamente l'array.

Destrutturare array annidati con list()

Quando ogni elemento è a sua volta un array, è possibile destrutturarlo inline con list() (o con la sintassi abbreviata [] disponibile da PHP 7.1+):

<?php

$points = [[1, 2], [3, 4], [5, 6]];

foreach ($points as [$x, $y]) {
  echo "x=$x, y=$y" . PHP_EOL;
}

// Output:
// x=1, y=2
// x=3, y=4
// x=5, y=6

Quando usare foreach

  • Usa foreach per qualsiasi array o iterabile di cui vuoi ogni elemento — è la scelta più chiara e non rischia di uscire dai limiti dell'array.
  • Usa un ciclo for quando hai bisogno di un controllo preciso sul contatore (saltare elementi, avanzare di 2, contare a ritroso).
  • Usa while quando il numero di iterazioni non è noto in anticipo e dipende da una condizione.

È anche possibile uscire anticipatamente da un foreach con break o saltare un'iterazione con continue, esattamente come negli altri cicli.

Esercitazione

Pratica
Qual è lo scopo principale del ciclo foreach in PHP secondo https://www.w3docs.com/learn-php/foreach.html?
Qual è lo scopo principale del ciclo foreach in PHP secondo https://www.w3docs.com/learn-php/foreach.html?
Was this page helpful?