PHP Conference Kansai 2025

array_replace_recursive

(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() sustituye los valores del array array con los valores de las mismas claves provenientes de los arrays siguientes. Si una clave del primer array existe en uno de los arrays siguientes, su valor será sustituido. Si la clave no existe en el primer array, será creada. Si la clave solo existe en el primer array, será dejada intacta. Si varios arrays son pasados como argumentos de sustitución, serán tratados en orden.

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 resultado del ejemplo sería:

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 resultado del ejemplo sería:

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

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

    [others] => litchis
)

Ver también

add a note

User Contributed Notes 1 note

up
9
Pau Prat Torrella
5 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']].
To Top