PHP: array_merge_recursive - Manual
(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)
array_merge_recursive — Combina uno o varios arrays juntos, de manera recursiva
Descripción
array_merge_recursive(array ...$arrays): array
Si los arrays pasados como argumentos tienen las mismas claves (strings), los valores son entonces reunidos en un array, de manera recursiva, de forma que, si uno de estos valores es un array en sí mismo, la función lo reunirá con los valores de la entrada actual. Sin embargo, si dos arrays tienen la misma clave numérica, el último valor no sobrescribirá el anterior, sino que será añadido al final del array.
Parámetros
arrays-
Lista variable de arrays a reunir de manera recursiva.
Valores devueltos
Un array de valores resultantes de la fusión de los argumentos. Si es llamada sin argumentos, devuelve un array vacío.
Historial de cambios
| Versión | Descripción |
|---|---|
| 7.4.0 | Esta función puede ahora ser llamada sin parámetros. Anteriormente, al menos un parámetro era requerido. |
Ejemplos
Ejemplo #1 Ejemplo con array_merge_recursive()
<?php
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
?>
El ejemplo anterior mostrará:
Array
(
[color] => Array
(
[favorite] => Array
(
[0] => red
[1] => green
)
[0] => blue
)
[0] => 5
[1] => 10
)
Ver también
- array_merge() - Fusiona varios arrays en uno solo
- array_replace_recursive() - Sustituye recursivamente en el primer array los elementos de los otros arrays proporcionados
Found A Problem?
gabriel dot sobrinho at gmail dot com ¶
16 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.