合并不同长度的PHP数组

时间:2014-03-10 01:09:00

标签: php arrays

假设我有两个这样的数组:

$arr1 = array(
array('position' => 1),
array('position' => 2),
array('position' => 3),
array('position' => 4),
array('position' => 5),
array('position' => 6),
array('position' => 7)
);

$arr2 = array(      
array(
    'a' => 'A1', 
    'b' => 'B1',
    'c' => 'C1'
),
array(
    'a' => 'A2',
    'b' => 'B2',
    'c' => 'C2'
),
array(
    'a' => 'A3',
    'b' => 'B3',
    'c' => 'C3'
)
);

目标是得到一个结果数组,其中第一个数组中的键position被复制到第二个数组中的每个数组,如下所示:

$final_arr = array(
array(
    'a' => 'A1',
    'b' => 'B1',
    'c' => 'C1', 
    'position' => 1
),
array(
    'a' => 'A2',
    'b' => 'B2',
    'c' => 'C2', 
    'position' => 2
),
array(
    'a' => 'A3',
    'b' => 'B3',
    'c' => 'C3', 
    'position' => 3
)
);

为什么我不能用array_merge做这个?有什么想法吗?

注意如上所示,数组的长度不一样

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

$new=array();
foreach ($arr2 as $k=>$v){

$new[]=$v+$arr1[$k];
}

print_r($new);

http://codepad.viper-7.com/tYkEWa

答案 1 :(得分:0)

array_merge只会加入数组。你会得到一个由$arr1$arr2的值(子数组)组成的数组。 (array_merge实际上有两种不同的行为,具体取决于它所操作的数组是否具有数字键或字符串/关联键。)你想要的是:

foreach($arr1 as $idx => $subar) {
  if (!isset($arr2[$idx])) {
    break;
  }
  $arr2[$idx]['position'] = $subar['position'];
}

我假设“位置”键已修复。如果不是,那么您必须保证每个$subar都有一个单独的已知密钥,可以使用array_shift(array_keys($subar))之类的内容进行提取。