2009-10-28 4 views
0

Я не совсем уверен, как это сделать. Скажем, у меня есть 2 ассоциативные массивыОбъединение нескольких ассоциативных массивов в PHP

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3"); 
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7"); 

Как я мог продуцируют «добавить вверх» массив как ниже

$arr1 = array(
    array('a', "1", "9"), 
    array('b', "2", "8"), 
    array('c', "3", "7") 
); 

я не уверен, если выше синтаксис является правильным. Если это не так, то дополнительный состав, который выглядит, как показано ниже будет делать слишком

$arr1 = array(
    'a' => array("1", "9"), 
    'b' => array("2", "8"), 
    'c' => array("3", "7") 
); 

Благодарности

+2

вы не означает 'массив ('а' => Array ('1', '9'), ...'? – SilentGhost

+0

@SilentGhost, Вероятно, у меня нет большого опыта работы с несколькими вложенными уровнями ассоциативных массивов, но ваш формат тоже должен выполнять эту работу. – drummer

ответ

0
$arr1 = array('a' => "1", 'b' => "2", 'c' => "3"); 
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7"); 

$summ=array(); 
foreach(array($arr1,$arr2) as $arr){ 
    $keys=array_keys($arr); 
    foreach($keys as $key){ 
     if(isset($summ[$key])) 
      $summ[$key][]=$arr[$key]; 
     else $summ[$key]=array($arr[$key]; 
    } 
} 
/* 
This will have made: 
$sum = array( 
    'a' => array("1", "9"), 
    'b' => array("2", "8"), 
    'c' => array("3", "7") 
); 

I leave it up to you to now reduce this one more step to match your desired output. 
*/ 
+0

У SilentGhost был лучший, если он всего 2 массива, и у них одинаковые ключи. Если ключи могут отличаться или вам нужно масштабировать от 2 массивов, то это ближе к тому, что вам нужно. –

+0

Хорошая точка. Я думаю, что они, вероятно, могут измениться. Например, 1 массив может иметь b d (нет c), а другой a b c (no d). В этом случае я буду нуждаться в нем как b c d, но с записями, вставленными для того, что отсутствует для того или другого. Вы говорите, что это будет лучше, чем другое? – drummer

3
foreach($arr1 as $k=>$v) { 
    $new[$k] = array($v, $arr2[$k]); 
} 

Это то, что я думаю, что вы хотите. Но если я ошибаюсь, то вы могли бы сделать:

foreach($arr1 as $k=>$v) { 
    $new[] = array($k, $v, $arr2[$k]); 
} 
+0

Ваша вторая форма будет генерировать то, что он искал. Это предполагает, что оба ассоциативных массива будут иметь те же ключи. –

+0

true, он никогда не был предназначен для более изощренной работы. Это довольно легко сделать, чтобы сделать более общее решение, а не уверен, что ему это нужно. – SilentGhost

+0

Спасибо вам обоим :) Я тестировал, и это похоже на Ben's ответ лучше подходит, но у меня все еще есть небольшая ошибка с пробелами. Я открою еще один вопрос – drummer