PHP Array Replace: Ein vollständiger Leitfaden
Die PHP-Funktion array_replace ersetzt Werte eines Arrays durch Werte aus anderen Arrays – schlüsselbasiert und ohne die Originale zu verändern.
In PHP ersetzt die Funktion array_replace() die Werte eines Basis-Arrays durch Werte aus einem oder mehreren Ersatz-Arrays, abgeglichen nach Schlüssel. Für jeden Schlüssel, der in einem späteren Array vorkommt, überschreibt dessen Wert den Wert im Basis-Array; Schlüssel, die noch nicht vorhanden sind, werden angehängt. Die ursprünglichen Arrays werden nie verändert — array_replace() gibt ein neues Array zurück.
Diese Seite behandelt die Syntax und Parameter von array_replace(), den Umgang mit String- gegenüber numerischen Schlüsseln, den Unterschied zu array_merge() sowie die Besonderheit, dass die Funktion nicht rekursiv arbeitet (verwenden Sie array_replace_recursive(), wenn Sie verschachtelte Arrays zusammenführen müssen).
Wann sollte man sie verwenden?
Greifen Sie auf array_replace() zurück, wenn Sie Standardwerte überschreiben möchten: Definieren Sie ein Basis-Array mit Standardwerten und übergeben Sie dann die benutzerseitig bereitgestellten Überschreibungen als zweites Argument. Da der Abgleich nach Schlüssel (nicht nach Position) erfolgt, ist dies die sauberste Methode, Konfigurations-Arrays zusammenzuführen, bei denen Schlüssel eine inhaltliche Bedeutung tragen.
Syntax
Die Syntax der Funktion array_replace lautet wie folgt:
PHP array_replace Funktionssyntax
array_replace ( array $array1 , array $array2 [, array $... ] ) : arrayarray_replace() erwartet mindestens ein Array und akzeptiert beliebig viele weitere Arrays. Die Ersatz-Arrays werden von links nach rechts durchlaufen: Jeder Wert, dessen Schlüssel bereits in $array1 vorhanden ist, überschreibt diesen, und jeder neue Schlüssel wird angehängt. Spätere Arrays gewinnen gegenüber früheren. Die Funktion gibt das resultierende Array zurück und lässt alle Eingaben unverändert.
Hinweis: Numerische Schlüssel werden genauso behandelt wie String-Schlüssel — anhand des tatsächlichen Schlüsselwerts, nicht nach Position. Dies ist der entscheidende Unterschied zu
array_merge(), das Integer-Schlüssel neu nummeriert.
Parameter
array1: Das initiale Array, dessen Werte durch Werte aus den anderen Arrays ersetzt werden.array2: Das Array, dessen Werte die Werte inarray1ersetzen....: Optionale weitere Arrays, deren Werte zur weiteren Ersetzung der Werte inarray1verwendet werden.
Beispiele
Betrachten wir einige Beispiele, um zu sehen, wie array_replace funktioniert.
Beispiel 1: Werte in einem einzelnen Array ersetzen
PHP-Beispiel 1: Werte in einem einzelnen Array mit array_replace ersetzen
Ausgabe:
Array
(
[a] => peach
[b] => banana
[c] => cherry
)Hier existiert Schlüssel a in beiden Arrays, sodass $array2 ihn überschreibt (apple → peach). Schlüssel b existiert nur in $array1 und bleibt daher als banana erhalten. Schlüssel c existiert nur in $array2 und wird dem Ergebnis angehängt.
Beispiel 2: Werte in mehreren Arrays ersetzen
PHP-Beispiel 2: Werte in mehreren Arrays mit array_replace ersetzen
Ausgabe:
Array
(
[a] => peach
[b] => blueberry
[c] => cherry
[d] => date
)Die Ersatz-Arrays werden von links nach rechts angewendet. Schlüssel a wird durch $array2 auf peach gesetzt. Schlüssel b beginnt als banana, wird aber durch $array3 zu blueberry überschrieben — das letzte Array gewinnt. Die Schlüssel c (aus $array2) und d (aus $array3) sind neu und werden daher angehängt.
Beispiel 3: Nicht rekursiv — verwenden Sie array_replace_recursive()
array_replace() ersetzt ganze Werte, sodass ein verschachteltes Array bei einem übereinstimmenden Schlüssel vollständig ersetzt statt zusammengeführt wird. Wenn Sie ein tiefes Zusammenführen benötigen, verwenden Sie array_replace_recursive().
PHP-Beispiel 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));
?>Ausgabe:
Array
(
[db] => Array
(
[host] => example.com
)
)
Array
(
[db] => Array
(
[host] => example.com
[port] => 3306
)
)Bei array_replace() geht der ursprüngliche port verloren, weil das gesamte db-Array ersetzt wird. array_replace_recursive() steigt in das verschachtelte Array hinab und behält port.
array_replace() vs. array_merge()
Beide Funktionen kombinieren Arrays, behandeln Schlüssel jedoch unterschiedlich:
- String-Schlüssel: verhalten sich gleich — spätere Werte überschreiben frühere.
- Integer-Schlüssel:
array_merge()nummeriert sie sequenziell neu, sodass Werte angehängt statt überschrieben werden.array_replace()behält die Integer-Schlüssel bei und überschreibt übereinstimmende.
<?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
?>Ausgabe:
Array
(
[0] => zero
[1] => one
[2] => ONE
[3] => two
)
Array
(
[0] => zero
[1] => ONE
[2] => two
)Siehe array_merge() für den vollständigen Vergleich.
Fazit
Die Funktion array_replace in PHP bietet eine bequeme Möglichkeit, Arrays zu aktualisieren, indem ihre Werte durch Werte aus anderen Arrays ersetzt werden. Dank ihrer einfachen Syntax und flexiblen Parameter ist sie in einer Vielzahl von Situationen einsetzbar und ein unverzichtbares Werkzeug für PHP-Entwickler. Ob Sie an einem einfachen oder einem komplexen Projekt arbeiten — die Funktion array_replace kann Ihren Entwicklungsprozess optimieren und Ihren Code effizienter gestalten.