🔄 Unire più Array con array_merge_recursive() in PHP
La funzione array_merge_recursive() è una versione avanzata di array_merge():
invece di sovrascrivere i valori che hanno la stessa chiave, li unisce in array annidati.
Questo significa che conserva tutti i dati provenienti dagli array originali.
1. Sintassi
array_merge_recursive(array1, array2, ...);
- array1, array2, ... → gli array da unire.
- Ritorna: un nuovo array combinato con tutte le chiavi e i valori, inclusi quelli duplicati.
2. Differenza principale con array_merge()
Quando due array hanno la stessa chiave:
array_merge()→ sovrascrive il valore precedente.array_merge_recursive()→ unisce i valori in un array annidato.
3. Esempio base
<?php
$a = ["colore" => "rosso", "frutta" => "mela"];
$b = ["colore" => "verde", "vegetale" => "pisello"];
$unito = array_merge_recursive($a, $b);
print_r($unito);
?>
Array
(
[colore] => Array
(
[0] => rosso
[1] => verde
)
[frutta] => mela
[vegetale] => pisello
)
Come puoi vedere, i valori di colore sono stati uniti in un array, non sovrascritti.
4. Esempio con chiavi numeriche
Se le chiavi sono numeriche, i valori vengono semplicemente aggiunti in fondo all’array:
<?php
$a = [1, 2, 3];
$b = [4, 5];
$unito = array_merge_recursive($a, $b);
print_r($unito);
?>
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
5. Esempio pratico: unire dati di profili
Immagina di avere due array di dati provenienti da fonti diverse per lo stesso utente:
<?php
$profilo1 = [
"nome" => "Luca",
"hobby" => ["lettura", "sport"]
];
$profilo2 = [
"hobby" => ["musica", "viaggi"],
"eta" => 25
];
$unito = array_merge_recursive($profilo1, $profilo2);
print_r($unito);
?>
Array
(
[nome] => Luca
[hobby] => Array
(
[0] => lettura
[1] => sport
[2] => musica
[3] => viaggi
)
[eta] => 25
)
I due array di hobby sono stati fusi insieme in un unico array di valori.
6. Attenzione alla profondità
array_merge_recursive() unisce in modo ricorsivo,
cioè se trova altri array annidati, continuerà a unirli anch’essi.
Questo può creare strutture complesse in caso di dati profondamente annidati.
7. Differenze con funzioni simili
| Funzione | Chiavi duplicate | Comportamento |
|---|---|---|
| array_merge() | Sovrascritte | Il valore dell’array successivo sostituisce il precedente. |
| array_merge_recursive() | Mantenute | I valori vengono uniti in array annidati. |
| + (operatore di unione) | Ignorate | Il primo valore con quella chiave viene mantenuto. |
LABORATORIO
Unire array mantenendo tutte le chiavi con array_merge_recursive()
In questo laboratorio imparerai a unire array in modo che tutti i valori vengano conservati, anche quelli che condividono la stessa chiave. È molto utile per fondere dati o configurazioni da più fonti.
- Editor di codice PHP (VS Code, Notepad++)
- Server locale (XAMPP, MAMP, Laragon)
- Browser per visualizzare i risultati
1 Unire array con chiavi duplicate
Crea un file chiamato array-merge-recursive.php e inserisci questo codice:
<?php
$a = ["colore" => "rosso", "frutta" => "mela"];
$b = ["colore" => "verde", "vegetale" => "pisello"];
$unito = array_merge_recursive($a, $b);
echo "<h3>Array unito con chiavi duplicate:</h3>";
print_r($unito);
?>
2 Unire array con valori multipli
Prova a unire dati con chiavi che contengono già array:
<?php
$profilo1 = [
"nome" => "Luca",
"hobby" => ["lettura", "sport"]
];
$profilo2 = [
"hobby" => ["musica", "viaggi"],
"eta" => 25
];
$unito = array_merge_recursive($profilo1, $profilo2);
echo "<h3>Array unito con array annidati:</h3>";
print_r($unito);
?>
3 Combinare array numerici e associativi
Puoi anche unire array con chiavi miste:
<?php
$a = ["animali" => ["cane", "gatto"]];
$b = ["animali" => ["pesce"], "piante" => ["rosa", "tulipano"]];
$unito = array_merge_recursive($a, $b);
echo "<h3>Unione di array complessi:</h3>";
print_r($unito);
?>
4 Test e analisi
- Esegui gli script e osserva come i valori con la stessa chiave vengono uniti in array.
- Prova con array annidati più profondi per vedere la fusione ricorsiva.
- Confronta i risultati con
array_merge()e nota la differenza. - Usa questa funzione per fondere dati da più sorgenti senza perdere informazioni.