PHP Conference Japan 2024

array_replace_recursive

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

array_replace_recursive递归地将传入数组中的元素替换到第一个数组中

描述

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

array_replace_recursive()array 的值替换为所有后续数组中的相同值。如果第一个数组中的键存在于第二个数组中,则其值将被第二个数组中的值替换。如果该键存在于第二个数组中,而不在第一个数组中,则它将在第一个数组中创建。如果某个键仅存在于第一个数组中,则保持不变。如果传递了多个数组进行替换,则将按顺序处理它们,后面的数组会覆盖前面的值。

array_replace_recursive() 是递归的:它将递归进入数组并将相同的过程应用于内部值。

当第一个数组中的值为标量时,它将被第二个数组中的值替换,无论它是标量还是数组。当第一个数组和第二个数组中的值都是数组时,array_replace_recursive() 将递归地替换其各自的值。

参数

array

要替换元素的数组。

replacements

从中提取元素的数组。

返回值

返回一个 数组

示例

示例 #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