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