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
)

参见

添加备注

用户贡献的备注 1 个备注

Pau Prat Torrella
4 年前
请注意,如果 $array2 中的值为空数组,则该函数将不会替换来自 $array1 的子树。
即使此维度的键在技术上是“已设置”的。

(我认为它将此视为另一个需要递归进入的级别,找不到要比较的键,回溯时会保留此子树)

例如

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

$result 仍然是:['first' => ['second' => 'hello']].
To Top