PHP Conference Kansai 2025

array_merge_recursive

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

array_merge_recursiveBir veya daha fazla sayıda diziyi ardarda ekleyerek yeni bir dizi oluşturur

Açıklama

array_merge_recursive(array ...$diziler): array

Belirtilen dizilerin elemanlarını bir öncekinin elemanlarının ardına eklemek suretiyle yeni bir dizi oluşturur ve bu diziyi döndürür.

Eğer dizilerde aynı anahtara sahip elemanlar varsa sonraki dizilerin eleman değerleri ilk elemana bir alt dizi değeri olarak ardarda eklenir. Eğer değerlerden biri zaten bir dizi ise işlev bu diziyi diğer dizideki ilgili girdiye katıştırır. Ancak, eğer diziler sayısal anahtarlar içeriyorsa sonraki değer daima sona eklenir.

Bağımsız Değişkenler

diziler

Kendinden öncekinin ardına eklenecek diziler.

Dönen Değerler

Elde edilen diziyi döndürür. Bağımsız değişkensiz çağrılmışsa boş bir dizi döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
7.4.0 Bu işlev bağımsız değişkensiz çağrılabilir. Evvelce, en azından bir bağımsız değişken gerekirdi.

Örnekler

Örnek 1 - array_merge_recursive() örneği

<?php
$ar1
= array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red
                    [1] => green
                )

            [0] => blue
        )

    [0] => 5
    [1] => 10
)

Ayrıca Bakınız

add a note

User Contributed Notes 1 note

up
175
gabriel dot sobrinho at gmail dot com
15 years ago
I refactored the Daniel's function and I got it:

<?php
/**
* array_merge_recursive does indeed merge arrays, but it converts values with duplicate
* keys to arrays rather than overwriting the value in the first array with the duplicate
* value in the second array, as array_merge does. I.e., with array_merge_recursive,
* this happens (documented behavior):
*
* array_merge_recursive(array('key' => 'org value'), array('key' => 'new value'));
* => array('key' => array('org value', 'new value'));
*
* array_merge_recursive_distinct does not change the datatypes of the values in the arrays.
* Matching keys' values in the second array overwrite those in the first array, as is the
* case with array_merge, i.e.:
*
* array_merge_recursive_distinct(array('key' => 'org value'), array('key' => 'new value'));
* => array('key' => array('new value'));
*
* Parameters are passed by reference, though only for performance reasons. They're not
* altered by this function.
*
* @param array $array1
* @param array $array2
* @return array
* @author Daniel <daniel (at) danielsmedegaardbuus (dot) dk>
* @author Gabriel Sobrinho <gabriel (dot) sobrinho (at) gmail (dot) com>
*/
function array_merge_recursive_distinct ( array &$array1, array &$array2 )
{
$merged = $array1;

foreach (
$array2 as $key => &$value )
{
if (
is_array ( $value ) && isset ( $merged [$key] ) && is_array ( $merged [$key] ) )
{
$merged [$key] = array_merge_recursive_distinct ( $merged [$key], $value );
}
else
{
$merged [$key] = $value;
}
}

return
$merged;
}
?>

This fix the E_NOTICE when the the first array doesn't have the key and the second array have a value which is a array.
To Top