2010-02-02 3 views
2

У меня есть запрос, который я запускаю несколько раз с разными параметрами. Я использую синтаксический анализатор xml, чтобы возвращать результаты в jQuery.объединить два (или более ..) многомерных массива в php

Я не могу найти способ объединить результаты на первом «узле», не перезаписывая первую запись.

Упрощенный пример кода:

$temp1 = returnArray(0); 

$temp2 = returnArray(1); 

$data = array_merge($temp1, $temp2); 

print_r($data); 

function returnArray($switch) 
{ 
    if($switch == 0) 
    { 
     $data['data']['first'] = "something"; 
    } else { 
     $data['data']['second'] = "something ELSE"; 
    } 
    return $data; 
} 

приводит к распечатке Array ([data] => Array ([second] => something ELSE)) - $ temp2 будет перезаписывать $ temp1. Я понимаю, что это поведение по умолчанию array_merge(), которое меня сбивает с толку.

Я также пытался делать что-то вроде $data = $temp1+$temp2; или ...

$data = returnArray(0); 

$data += returnArray(1); 

печатает Array ([data] => Array ([first] => something))

или ...

$data = returnArray(0); 

$data .= returnArray(1); 
print_r($data); 

печатает ArrayArray

Я кончался взлом это вместе:

$data['data'] = returnArray(0); 
$data['data'] = returnArray(1); 

function returnArray($switch){ 
    if($switch == 0) return Array('first' => 'something'); 
    else return Array('second' => 'something else'); 
} 

Что я не все, что доволен ... Хотя он получает работу в этом случае, это не будет все, что применимо в будущем, когда возникает более сложная ситуация.

Есть ли лучший способ взять два ассоциативных многомерных массива и объединить их без перезаписи?

РЕДАКТИРОВАТЬ:

Я хотел бы способ для повторного использования, расширяемый и иметь возможность обрабатывать массивы 2+ с 2+ размерами.

+0

Вы хотите передать их с помощью функции первого, чтобы определить содержимое массива, а затем объединить их? –

ответ

3

PHP фактически предоставляет функцию, называемую array_merge_recursive(), которая используется именно в этом типе сценария. От documentation page:

array_merge_recursive() объединяет элементы одного или более массивов вместе, так что значения одного добавляются к концу предыдущего один. Он возвращает результирующий массив.

Если входные массивы имеют одинаковые строковых ключей, то значения для этих ключей объединяются в массив, и это делается рекурсивно, так, что если один из значений сам является массив, функция будет объединять с соответствующей записью в еще одним массивом. Если, однако, массивы имеют один и тот же цифровой ключ, значение позже не будет перезаписывать исходное значение , но будет добавлено.

Пример:

<?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); 
?> 

Выход:

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

      [0] => blue 
     ) 

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

спасибо =) Я взглянул на array_merge_recursive(), но сначала прочитал, что это не похоже на то, что я хотел. Я стою исправлено! –

Смежные вопросы