CakeFest 2024: The Official CakePHP Conference

array_replace_recursive

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

array_replace_recursiveSubstitui elementos de arrays passado no primeiro array recursivamente

Descrição

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

array_replace_recursive() substitui os valores de array pelos mesmos valores de todos os arrays seguintes. Se uma key do primeiro array existir no segundo array, seu valor será substituído pelo valor do segundo array. Se a key existir no segundo array, e não no primeiro, ela será criada no primeiro array. Se uma key existir apenas no primeiro array, ela será deixada como está. Se vários arrays forem passados para substituição, eles serão processados em ordem, o array posterior sobrescrevendo os valores anteriores.

array_replace_recursive() é recursivo: ele será recursivo em arrays e aplicará o mesmo processo ao valor interno.

Quando o valor do primeiro array for escalar, ele será substituído pelo valor do segundo array, seja ele escalar ou array. Quando o valor no primeiro array e no segundo array são ambos arrays, array_replace_recursive() substituirá seus respectivos valores recursivamente.

Parâmetros

array

O array no qual os elementos são substituídos.

replacements

Arrays dos quais os elementos serão extraídos.

Valor Retornado

Returns an array.

Exemplos

Exemplo #1 array_replace_recursive() example

<?php
$base
= array('frutas_citricas' => array( "laranja") , 'frutas_vermelhas' => array("amora", "framboesa"), );
$substituicoes = array('frutas_citricas' => array('abacaxi'), 'frutas_vermelhas' => array('mirtilo'));

$cesta = array_replace_recursive($base, $substituicoes);
print_r($cesta);

$cesta = array_replace($base, $substituicoes);
print_r($cesta);
?>

O exemplo acima produzirá:

Array
(
    [frutas_citricas] => Array
        (
            [0] => abacaxi
        )

    [frutas_vermelhas] => Array
        (
            [0] => mirtilo
            [1] => framboesa
        )

)
Array
(
    [frutas_citricas] => Array
        (
            [0] => abacaxi
        )

    [frutas_vermelhas] => Array
        (
            [0] => mirtilo
        )

)

Exemplo #2 array_replace_recursive() e recursive behavior

<?php
$base
= array('frutas_citricas' => array("laranja") , 'frutas_vermelhas' => array("amora", "framboesa"), 'outras' => 'banana' );
$substituicoes = array('frutas_citricas' => 'abacaxi', 'frutas_vermelhas' => array('mirtilo'), 'outras' => array('lichia'));
$substituicoes2 = array('frutas_citricas' => array('abacaxi'), 'frutas_vermelhas' => array('mirtilo'), 'outras' => 'lichia');

$cesta = array_replace_recursive($base, $substituicoes, $substituicoes2);
print_r($cesta);

?>

O exemplo acima produzirá:

Array
(
    [frutas_citricas] => Array
        (
            [0] => abacaxi
        )

    [frutas_vermelhas] => Array
        (
            [0] => mirtilo
            [1] => framboesa
        )

    [outras] => lichia
)

Veja Também

add a note

User Contributed Notes 1 note

up
7
Pau Prat Torrella
4 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