W3docs

PHP-Funktion: array_replace_recursive()

Die Funktion array_replace_recursive() in PHP fügt arrays zusammen und erhält dabei die Struktur und Schlüssel der ursprünglichen arrays.

Die Funktion array_replace_recursive() in PHP fügt arrays zusammen und bewahrt dabei die Struktur und Schlüssel der ursprünglichen arrays. Sie ersetzt Elemente im ersten array durch Elemente aus nachfolgenden arrays und steigt dabei rekursiv in verschachtelte arrays hinab. Das macht sie zum richtigen Werkzeug, wenn ein mehrdimensionales array über ein anderes gelegt werden soll — beispielsweise um Benutzerüberschreibungen auf eine Standardkonfiguration anzuwenden, ohne die verschachtelten Daten zu glätten.

Dieses Kapitel behandelt die Syntax der Funktion, das tatsächliche Rekursionsverhalten, mehrere ausgearbeitete Beispiele (einschließlich mehrerer Ersetzungs-arrays) sowie die Unterschiede zu verwandten Funktionen wie array_replace() und array_merge_recursive().

Syntax

Die Syntax der Funktion array_replace_recursive() ist unkompliziert: Das erste Argument ist das array, das geändert wird, und die nachfolgenden Argumente sind arrays, aus denen Elemente in das erste array übernommen werden.

PHP array_replace_recursive Funktionssyntax

array_replace_recursive(array $array, array ...$replacements): array

Das erste Argument ist das Basis-array. Jedes nachfolgende array wird von links nach rechts darauf angewendet, sodass ein Wert in einem späteren array denselben Schlüssel in einem früheren überschreibt. Die Funktion gibt ein neues array zurück und verändert die Argumente nicht direkt.

Funktionsweise

Die Funktion array_replace_recursive() arbeitet, indem sie alle Elemente der übergebenen arrays durchläuft. Für jedes Element prüft die Funktion, ob der Schlüssel im ersten array vorhanden ist. Falls der Schlüssel nicht vorhanden ist, wird das Element dem ersten array einfach hinzugefügt. Falls der Schlüssel vorhanden ist, prüft die Funktion, ob der Wert ein array ist. Wenn ja, ruft sich die Funktion rekursiv mit dem aktuellen Wert im ersten array und dem entsprechenden Wert im zweiten array als Argumente auf. Wenn der Wert kein array ist, wird er einfach durch den Wert aus dem zweiten array ersetzt.

Dieser Vorgang wiederholt sich für alle weiteren übergebenen arrays, wobei Elemente nach Bedarf im ersten array hinzugefügt oder ersetzt werden. Das Ergebnis ist ein einzelnes array, das aus dem Zusammenführen aller Elemente der Eingabe-arrays hervorgeht. Hinweis: Anders als array_merge_recursive() ersetzt diese Funktion numerische Schlüssel, anstatt sie per Index zusammenzuführen.

Beispiele

Hier sind einige Beispiele für die praktische Verwendung der Funktion array_replace_recursive():

PHP-Beispiel zur Verwendung der Funktion array_replace_recursive

php— editable, runs on the server

Die Ausgabe dieses Codes lautet:

Array
(
    [a] => Array
        (
            [b] => d
        )
)

Die Rekursion tritt in Kraft, weil sowohl $array1['a'] als auch $array2['a'] arrays sind, sodass die Funktion in sie hinabsteigt und b ersetzt, anstatt den gesamten a-Zweig zu überschreiben.

Ein weiteres Beispiel:

PHP Weiteres Beispiel zur Verwendung der Funktion array_replace_recursive

php— editable, runs on the server

Die Ausgabe dieses Codes lautet:

Array
(
    [a] => d
)

Hier findet die Rekursion nicht statt: $array2['a'] ist der skalare string 'd', kein array. Wenn der Ersetzungswert kein array ist, wird der gesamte vorhandene Wert (einschließlich eines etwaigen verschachtelten arrays) vollständig überschrieben. Die Funktion steigt nur dann rekursiv hinab, wenn der Wert auf beiden Seiten als array vorliegt.

Mehrere arrays zusammenführen und neue Schlüssel hinzufügen

Es kann eine beliebige Anzahl von Ersetzungs-arrays übergeben werden. Sie werden der Reihe nach angewendet, und Schlüssel, die noch nicht vorhanden sind, werden hinzugefügt statt ersetzt.

PHP array_replace_recursive mit mehreren arrays

<?php

$defaults = ['db' => ['host' => 'localhost', 'port' => 3306]];
$env      = ['db' => ['host' => 'db.internal']];
$cli      = ['db' => ['port' => 5432], 'debug' => true];

$result = array_replace_recursive($defaults, $env, $cli);

print_r($result);

?>

Die Ausgabe dieses Codes lautet:

Array
(
    [db] => Array
        (
            [host] => db.internal
            [port] => 5432
        )

    [debug] => 1
)

Die verschachtelten Schlüssel host und port werden jeweils durch die späteren arrays überschrieben, während der brandneue Schlüssel debug angehängt wird. Diese Überlagerung von links nach rechts ist genau der Grund, warum die Funktion für die schichtweise Konfigurationsverwaltung so nützlich ist.

array_replace_recursive() vs. verwandte Funktionen

  • array_replace() führt dieselbe Überlagerung durch, aber nur auf der obersten Ebene — sie steigt niemals in verschachtelte arrays hinab, sodass ein verschachtelter Wert immer vollständig ersetzt wird.
  • array_merge_recursive() kombiniert Werte, die denselben Schlüssel teilen (und macht aus zwei Skalaren ein array aus beiden), anstatt sie zu ersetzen, und nummeriert ganzzahlige Schlüssel neu. array_replace_recursive() behält einen einzelnen Ersetzungswert und bewahrt die ursprünglichen Schlüssel.
  • array_merge() ist das nicht-rekursive Zusammenführen, das ebenfalls ganzzahlige Schlüssel neu nummeriert.

Wenn das Ziel lautet „diese Standardwerte nehmen und mit diesen Werten überschreiben", sollte array_replace_recursive() verwendet werden. Wenn das Ziel lautet „alles unter jedem Schlüssel sammeln", sollte array_merge_recursive() verwendet werden.

Fazit

Zusammenfassend bietet die Funktion array_replace_recursive() in PHP eine komfortable Möglichkeit, arrays zusammenzuführen und dabei ihre ursprüngliche Struktur und Schlüssel zu erhalten. Sie ist besonders wertvoll für die Aktualisierung verschachtelter Konfigurationsdaten oder das Zusammenführen strukturierter Datensätze ohne manuelle Iteration.

Übungen

Übung
Was macht die Funktion array_replace_recursive() in PHP?
Was macht die Funktion array_replace_recursive() in PHP?
Was this page helpful?