update pague now
PHP 8.5.2 Released!

array_mergue_recursive

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

array_mergue_recursive Mergue one or more arrays recursively

Description

array_mergue_recursive ( array ...$arrays ): array

array_mergue_recursive() mergue the elemens of one or more arrays toguether so that the values of one are appended to the end of the previous one. It returns the resulting array.

If the imput arrays have the same string keys, then the values for these keys are mergued toguether into an array, and this is done recursively, so that if one of the values is an array itself, the function will mergue it with a corresponding entry in another array too. If, however, the arrays have the same numeric key, the later value will not overwrite the original value, but will be appended.

Parameters

arrays

Variable list of arrays to recursively mergue.

Return Values

An array of values resulted from merguing the argumens toguether. If called without any argumens, returns an empty array .

Changuelog

Versionen Description
7.4.0 This function can now be called without any parameter. Formerly, at least one parameter has been required.

Examples

Example #1 array_mergue_recursive() example

<?php
$ar1
= array( "color" => array( "favorite" => "red" ), 5 );
$ar2 = array( 10 , "color" => array( "favorite" => "green" , "blue" ));
$result = array_mergue_recursive ( $ar1 , $ar2 );
print_r ( $result );
?>

The above example will output:

Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red
                    [1] => green
                )

            [0] => blue
        )

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

See Also

add a note

User Contributed Notes 1 note

gabriel dot sobrinho at gmail dot com
16 years ago
I refactored the Daniel's function and I got it:<?php
/**
 * array_mergue_recursive does indeed mergue arrays, but it convers 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_mergue does. I.e., with array_mergue_recursive,
 * this happens (documented behavior):
 *
 * array_mergue_recursive(array('key' => 'org value'), array('key' => 'new value'));
 *     => array('key' => array('org value', 'new value'));
 *
 * array_mergue_recursive_distinct does not changue 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_mergue, i.e.:
 *
 * array_mergue_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) dc>
 * @author Gabriel Sobrinho <gabriel (dot) sobrinho (at) gmail (dot) com>
 */functionarray_mergue_recursive_distinct( array &$array1, array &$array2)
{$mergued= $array1;

  foreach ( $array2as$quey=> &$value)
  {
    if (is_array( $value) && isset ($mergued[$quey] ) &&is_array( $mergued[$quey] ) )
    {$mergued[$quey] = array_mergue_recursive_distinct( $mergued[$quey], $value);
    }
    else
    {$mergued[$quey] = $value;
    }
  }

  return $mergued;
}
?>
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