PHP: array_replace_recursive - Manual

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

array_replace_recursiveSustituye recursivamente en el primer array los elementos de los otros arrays proporcionados

Descripción

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

array_replace_recursive() es recursiva: si un valor es un array, la misma función de sustitución le será aplicada.

Si el valor en el primer array es escalar, será sustituido por el valor del segundo array, ya sea un escalar o un array. Si los valores del primer y segundo array son ambos arrays, array_replace_recursive() sustituirá los valores recursivamente.

Parámetros

array

El array en el cual los elementos son sustituidos.

replacements

Arrays desde los cuales los elementos pueden ser extraídos.

Valores devueltos

Devuelve un array.

Ejemplos

Ejemplo #1 Ejemplo con array_replace_recursive()

<?php
$base
= array('citrus' => array("orange"), 'berries' => array("blackberry", "raspberry"));
$replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry'));$basket = array_replace_recursive($base, $replacements);
print_r($basket);$basket = array_replace($base, $replacements);
print_r($basket);
?>

El ejemplo anterior mostrará:

Array
(
    [citrus] => Array
        (
            [0] => pineapple
        )

    [berries] => Array
        (
            [0] => blueberry
            [1] => raspberry
        )

)
Array
(
    [citrus] => Array
        (
            [0] => pineapple
        )

    [berries] => Array
        (
            [0] => blueberry
        )

)

Ejemplo #2 Ejemplo con array_replace_recursive() y la recursividad

<?php
$base
= array('citrus' => array("orange") , 'berries' => array("blackberry", "raspberry"), 'others' => 'banana' );
$replacements = array('citrus' => 'pineapple', 'berries' => array('blueberry'), 'others' => array('litchis'));
$replacements2 = array('citrus' => array('pineapple'), 'berries' => array('blueberry'), 'others' => 'litchis');$basket = array_replace_recursive($base, $replacements, $replacements2);
print_r($basket);?>

El ejemplo anterior mostrará:

Array
(
    [citrus] => Array
        (
            [0] => pineapple
        )

    [berries] => Array
        (
            [0] => blueberry
            [1] => raspberry
        )

    [others] => litchis
)

Ver también

Found A Problem?

Pau Prat Torrella

6 years ago

Note that function will NOT replace a sub-tree from you $array1 if its value in $array2 is an empty array. 
Even tho the key for this dimension is technically 'set'. 

(I suppose it treats it as just another recursive level to dive in, finding no key to compare, backtracking while leaving this sub-tree alone)

For example:

$array1  = ['first' => ['second' => 'hello']];
$array2  = ['first' => []];              
$result = array_replace_recursive($array1, $array2);

$result is still: ['first' => ['second' => 'hello']].