array_replace_recursive

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

array_replace_recursiveРекурсивно заменяет элементы первого массива элементами других массивов

Описание

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

Функция array_replace_recursive() заменяет значения массива array на значения с тем же ключом из каждого следующего массива. Значение первого массива заменяется значением из второго, если второй массив содержит ключ из первого. Функция создаст ключ в первом массиве, если второй массив содержит ключ, которого нет в первом. Ключ в первом массиве не изменяется, если ключ содержится только в первом массиве. Массивы обрабатываются по порядку, очередные значения перезаписывают предыдущие.

Функция array_replace_recursive() рекурсивно углубляется в массивы и применяет к каждому внутреннему значению один и тот же процесс.

Скалярное значение в первом массиве заменяется скалярным значением или массивом из второго. Функция array_replace_recursive() рекурсивно заменит значения в значении-массиве первого массива, если значения обоих массивов содержат массив.

Список параметров

array

Массив, элементы которого требуется заменить.

replacements

Массивы, из которых функция возьмёт элементы для замены.

Возвращаемые значения

Функция возвращает значение с типом array.

Примеры

Пример #1 Пример рекурсивной замены элементов функцией 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);

?>

Результат выполнения приведённого примера:

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

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

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

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

)

Пример #2 Функция array_replace_recursive() и рекурсивное поведение

<?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);

?>

Результат выполнения приведённого примера:

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

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

    [others] => litchis
)

Смотрите также

  • array_replace() - Заменяет элементы массива элементами других массивов
  • array_merge_recursive() - Рекурсивно сливает один или несколько массивов

Добавить

Примечания пользователей 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