Массив объединить в ассоциативный массив - PullRequest
0 голосов
/ 29 декабря 2011

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

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

Я ожидаю получить третий массив ($ c), подобный приведенному ниже, где содержимое $ b следует содержимому $ a:

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

}

Ответы [ 5 ]

1 голос
/ 29 декабря 2011
$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 голосов
/ 29 декабря 2011

Если вам не нужно $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);
0 голосов
/ 29 декабря 2011
$c = array();
foreach ($b as $bb) {
    $c[] = array_merge($a,$bb);
}
0 голосов
/ 29 декабря 2011

попробуйте

$c = array_merge($b, $a)

помощь в http://php.net/manual/es/function.array-merge.php

0 голосов
/ 29 декабря 2011

Вам нужно array_merge.

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

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

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

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

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

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

IE: c = массив (a = a, b = b, c = c и т. Д.) <- можно сделать с помощью array_merge ($ a, $ b, $ c и т. Д.) </p>

против

c = массив (b = массив (a = a, b = b, c = c и т. Д.), A = массив (d = d, e = e и т. Д.)) <- должен выполняться толькоконкатенировать следующий массив в конце следующим образом (и вообще пропустить $ c): </p>

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

//or

$c = array();
foreach ($possible_opp_action as $sub) {
    $c[] = $sub;    
}
...