2011-12-28 6 views
0

Мне нужно добавить значения ассоциативного массива к другому.Массив объединяется в ассоциативный массив

$a = array(4=>2,5=>5); 
$b = arrray(array(0=>0,1=>4,2=>10,3=>1000),array()...); 

Что я ожидаю, чтобы получить третий массив ($ с), как один ниже, где содержание $ Ь соответствует содержанию $ а:

$c = array(array(4=>2,5=>5,0=>0,1=>4,2=>10,3=>1000),array(4=>2,5=>5....)); 

Это то, что я (не работает):

$c = array(); 
foreach ($possible_opp_action as $sub) { 
    $c[] = array_push($to_merge,array_values($sub)); 

} 
+0

Ассоциативный массив имеет строковые ключи, ваш пример Массивы все имеют цифровые клавиши. .. можете прояснить, что именно вы хотите. –

ответ

1
$a = array(4=>2,5=>5); 
$b = array(array(0=>0,1=>4,2=>10,3=>1000), 
      array(0=>0,1=>40,2=>100,3=>2000), 
      array(4=>10) 
     ); 

$c = array(); 
foreach($b as $tmp) { 
    $c[] = $a+$tmp; 
} 

var_dump($c); 

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

0

Вам нужен массив_мер.

http://us.php.net/manual/en/function.array-merge.php

Примечание обработка дубликатов ключей:

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

EDIT:

я, возможно, не читал этот вопрос правильно - пожалуйста, уточнить ...

Вы хотите, чтобы все элементы массива в один массив, или массив с исходными массивами как элементы в нем (массив массивов)?

И.Е.: с = массив (а = а, Ь = Ь, с = с и т.д.) < - может быть сделано с array_merge ($ а, $ Ь, $ с, и т.д.)

против

с = массив ( Ь = массив (а = а, Ь = Ь, с = с, и т.д.), а = массив (д = д, е = е, и т.д.) ) < - должно быть сделанное просто конкатенированием следующего массива на конце, как это (и вообще пропустить $ c):

$c[] = $b; 
$c[] = $a; 

//or 

$c = array(); 
foreach ($possible_opp_action as $sub) { 
    $c[] = $sub;  
} 
0
$c = array(); 
foreach ($b as $bb) { 
    $c[] = array_merge($a,$bb); 
} 
0

Если вам не нужно $b в оригинальной форме:

<?php 

$a = array(4=>2,5=>5); 
$b = array(array(0=>0,1=>4,2=>10,3=>1000),array()); 

foreach ($b as &$ref) { 
    $ref = $a + $ref; 
} 

var_dump($b); 

В противном случае:

<?php 

$a = array(4=>2,5=>5); 
$b = array(array(0=>0,1=>4,2=>10,3=>1000),array()); 

$c = array(); 

foreach ($b as &$ref) { 
    $c[] = $a + $ref; 
} 

var_dump($c);