PHP Conference Kansai 2025

array_merge_recursive

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

array_merge_recursiveFührt ein oder mehrere Arrays rekursiv zusammen

Beschreibung

array_merge_recursive(array ...$arrays): array

array_merge_recursive() fügt die Elemente von einem oder mehreren Arrays zusammen, so dass die Werte eines Arrays an die des voherigen angehängt werden. Das daraus resultierende Array wird zurückgegeben.

Falls die angegebenen Arrays die selben String-Schlüssel haben, so werden die Werte dieser Schlüssel in einem Array zusammengeführt. Dies geschieht rekursiv, so dass, falls einer der Werte selbst ein Array ist, auch dieser Wert mit dem entsprechenden Eintrag eines anderen Arrays zusammengeführt wird. Falls jedoch die Arrays den gleichen numerischen Schlüssel haben, so wird der spätere Wert nicht den ursprünglichen Wert überschreiben, sondern er wird angehängt.

Parameter-Liste

arrays

Variable Liste der Arrays, die rekursiv zusammengeführt werden sollen.

Rückgabewerte

Ein Array mit Werten, die aus dem Zusammenführen der Argumente resultieren. Bei Aufruf ohne Argument wird ein leeres Array zurückgeliefert.

Changelog

Version Beschreibung
7.4.0 Diese Funktion kann nun ohne Parameter aufgerufen werden. Zuvor war mindestens ein Parameter erforderlich.

Beispiele

Beispiel #1 array_merge_recursive()-Beispiel

<?php
$ar1
= array("farbe" => array ("favorit" => "rot"), 5);
$ar2 = array(10, "farbe" => array ("favorit" => "grün", "blau"));
$result = array_merge_recursive ($ar1, $ar2);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [farbe] => Array
        (
            [favorit] => Array
                (
                    [0] => rot
                    [1] => grün
                )

            [0] => blau
        )

    [0] => 5
    [1] => 10
)

Siehe auch

add a note

User Contributed Notes 1 note

up
175
gabriel dot sobrinho at gmail dot com
15 years ago
I refactored the Daniel's function and I got it:

<?php
/**
* array_merge_recursive does indeed merge arrays, but it converts values with duplicate
* keys to arrays rather than overwriting the value in the first array with the duplicate
* value in the second array, as array_merge does. I.e., with array_merge_recursive,
* this happens (documented behavior):
*
* array_merge_recursive(array('key' => 'org value'), array('key' => 'new value'));
* => array('key' => array('org value', 'new value'));
*
* array_merge_recursive_distinct does not change the datatypes of the values in the arrays.
* Matching keys' values in the second array overwrite those in the first array, as is the
* case with array_merge, i.e.:
*
* array_merge_recursive_distinct(array('key' => 'org value'), array('key' => 'new value'));
* => array('key' => array('new value'));
*
* Parameters are passed by reference, though only for performance reasons. They're not
* altered by this function.
*
* @param array $array1
* @param array $array2
* @return array
* @author Daniel <daniel (at) danielsmedegaardbuus (dot) dk>
* @author Gabriel Sobrinho <gabriel (dot) sobrinho (at) gmail (dot) com>
*/
function array_merge_recursive_distinct ( array &$array1, array &$array2 )
{
$merged = $array1;

foreach (
$array2 as $key => &$value )
{
if (
is_array ( $value ) && isset ( $merged [$key] ) && is_array ( $merged [$key] ) )
{
$merged [$key] = array_merge_recursive_distinct ( $merged [$key], $value );
}
else
{
$merged [$key] = $value;
}
}

return
$merged;
}
?>

This fix the E_NOTICE when the the first array doesn't have the key and the second array have a value which is a array.
To Top