假设我有两个这样的数组:
$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做这个?有什么想法吗?
注意如上所示,数组的长度不一样
感谢您的帮助
答案 0 :(得分:2)
$new=array();
foreach ($arr2 as $k=>$v){
$new[]=$v+$arr1[$k];
}
print_r($new);
答案 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))
之类的内容进行提取。