PHP array_merge_recursive не работает, как я хочу - PullRequest
2 голосов
/ 10 января 2010

Так что в основном у меня есть эти два массива, которые я хочу объединить ...

array(1) { 
    ["first"]=>  
    array(1) { 
        ["second"]=>  
        array(0) { 
        } 
    } 
} 

array(1) { 
    ["second"]=>  
    array(1) { 
        ["third"]=>  
        array(0) { 
        } 
    } 
}

И это результат, которого я хотел бы достичь ...

array(1) { 
    ["first"]=>  
    array(1) { 
        ["second"]=>  
        array(1) {
            ["third"]=>  
            array(0) { 
            } 
        } 
    }  
}

Но используя $arr = array_merge_recursive($arr1, $arr2) я получаю этот вывод:

array(2) { 
    ["first"]=>  
    array(1) { 
        ["second"]=>  
        array(0) { 
        } 
    } 
    ["second"]=>  
    array(1) { 
        ["third"]=>  
        array(0) { 
        } 
    } 
} 

Из того, что я понимаю, array_merge_recursive должен получить мне то, что я хочу, но, видимо, нет. Что бы решить мою проблему?

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 января 2010

Массивы объединяются на одних и тех же «уровнях». Ваши массивы не перекрываются на одном и том же уровне: один со значением верхнего уровня со значением «первый», а другой со значением «второй». В результате получается новый массив с обоими массивами на верхнем уровне.

Для достижения желаемого результата необходимо заполнить

array_merge_recursive($arr1['first'], $arr2)

Тогда они совпадают и будут в равной степени соответствовать вашим ожиданиям.

Вы также можете написать некоторую функцию, которая рекурсивно проходит по вашим массивам, находя уровень, на котором совпадают массивы, и вызывая array_merge_recursive оттуда.

1 голос
/ 10 января 2010
$array2 = array('third' => array());
$array1['first']['second'] = $array2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...