PHP Array Replace: Guida Completa
Scopri come usare array_replace in PHP per sostituire i valori di un array con quelli di uno o più array successivi, con esempi pratici.
In PHP, la funzione array_replace() sostituisce i valori di un array base con i valori provenienti da uno o più array di sostituzione, abbinando per chiave. Per ogni chiave presente in un array successivo, quel valore sovrascrive il valore nell'array base; le chiavi non ancora presenti vengono aggiunte in coda. Gli array originali non vengono mai modificati — array_replace() restituisce un nuovo array.
Questa pagina illustra la sintassi e i parametri di array_replace(), come gestisce le chiavi string e numeriche, le differenze rispetto a array_merge(), e l'avvertenza che questa funzione non è ricorsiva (usa array_replace_recursive() quando è necessario unire array annidati).
Quando usarla
Ricorri a array_replace() quando vuoi sovrascrivere dei valori predefiniti: definisci un array base con i valori di default, poi passa le sostituzioni fornite dall'utente come secondo argomento. Poiché la corrispondenza avviene per chiave (non per posizione), è il metodo più pulito per unire array di configurazione in cui le chiavi hanno un significato specifico.
Sintassi
La sintassi della funzione array_replace è la seguente:
Sintassi della funzione PHP array_replace
array_replace ( array $array1 , array $array2 [, array $... ] ) : arrayarray_replace() accetta almeno un array e un numero qualsiasi di array aggiuntivi. Scorre gli array di sostituzione da sinistra a destra: ogni valore la cui chiave esiste già in $array1 lo sovrascrive, mentre ogni nuova chiave viene aggiunta in coda. Gli array successivi hanno la precedenza su quelli precedenti. La funzione restituisce l'array risultante e lascia invariati tutti gli input.
Nota: le chiavi numeriche vengono abbinate allo stesso modo delle chiavi string — per valore letterale della chiave, non per posizione. Questa è la differenza fondamentale rispetto a
array_merge(), che rinumera le chiavi intere.
Parametri
array1: È l'array iniziale i cui valori verranno sostituiti dai valori degli altri array.array2: È l'array i cui valori sostituiranno i valori inarray1....: Sono array aggiuntivi facoltativi, i cui valori verranno usati per sostituire ulteriormente i valori inarray1.
Esempi
Vediamo alcuni esempi per capire come funziona array_replace.
Esempio 1: Sostituzione dei valori in un singolo array
Esempio PHP 1: Sostituzione dei valori in un singolo array con array_replace
Output:
Array
(
[a] => peach
[b] => banana
[c] => cherry
)Qui la chiave a esiste in entrambi gli array, quindi $array2 la sovrascrive (apple → peach). La chiave b esiste solo in $array1, quindi rimane banana. La chiave c esiste solo in $array2, quindi viene aggiunta in coda al risultato.
Esempio 2: Sostituzione dei valori in più array
Esempio PHP 2: Sostituzione dei valori in più array con array_replace
Output:
Array
(
[a] => peach
[b] => blueberry
[c] => cherry
[d] => date
)Gli array di sostituzione vengono applicati da sinistra a destra. La chiave a viene impostata a peach da $array2. La chiave b parte come banana ma viene sovrascritta da $array3 con blueberry — vince l'ultimo array. Le chiavi c (da $array2) e d (da $array3) sono nuove, quindi vengono aggiunte in coda.
Esempio 3: Non è ricorsiva — usa array_replace_recursive()
array_replace() sostituisce interi valori, quindi un array annidato su una chiave corrispondente viene sostituito interamente invece di essere unito. Quando è necessaria una fusione profonda, usa array_replace_recursive().
Esempio PHP 3: array_replace vs array_replace_recursive
<?php
$base = ["db" => ["host" => "localhost", "port" => 3306]];
$override = ["db" => ["host" => "example.com"]];
// array_replace overwrites the whole "db" sub-array
print_r(array_replace($base, $override));
// array_replace_recursive merges the nested arrays
print_r(array_replace_recursive($base, $override));
?>Output:
Array
(
[db] => Array
(
[host] => example.com
)
)
Array
(
[db] => Array
(
[host] => example.com
[port] => 3306
)
)Con array_replace() la port originale viene persa perché l'intero array db viene sostituito. array_replace_recursive() scende nell'array annidato e mantiene port.
array_replace() vs array_merge()
Entrambe le funzioni combinano array, ma trattano le chiavi in modo diverso:
- Chiavi string: si comportano allo stesso modo — i valori successivi sovrascrivono quelli precedenti.
- Chiavi intere:
array_merge()le rinumera in modo sequenziale, quindi i valori vengono accodati invece di essere sovrascritti.array_replace()mantiene le chiavi intere e sovrascrive quelle corrispondenti.
<?php
$a = [0 => "zero", 1 => "one"];
$b = [1 => "ONE", 2 => "two"];
print_r(array_merge($a, $b)); // integer keys renumbered
print_r(array_replace($a, $b)); // integer keys preserved
?>Output:
Array
(
[0] => zero
[1] => one
[2] => ONE
[3] => two
)
Array
(
[0] => zero
[1] => ONE
[2] => two
)Vedi array_merge() per il confronto completo.
Conclusione
In conclusione, la funzione array_replace in PHP offre un modo comodo per aggiornare gli array sostituendo i loro valori con quelli di altri array. Grazie alla sintassi semplice e ai parametri flessibili, può essere impiegata in una grande varietà di situazioni, rendendola uno strumento essenziale per gli sviluppatori PHP. Che tu stia lavorando su un progetto semplice o complesso, la funzione array_replace può aiutarti a semplificare il processo di sviluppo e a rendere il tuo codice più efficiente.