我需要在PHP中比较两个2D数组。数组看起来像这样:
Array one
ID Name
11 Aa
11 Ab
12 Bb
13 Cc
14 Dd
15 Ee
Array two
ID Content
11 Cat
13 Dog
14 Donkey
现在我需要将这两者组合成一个这样的数组:
ID Name Conent
11 Aa Cat
11 Ab Cat
12 Bb
13 Cc Dog
14 Dd Donkey
15 Ee
我怎样才能做到这一点?我对array_merge()或$ array3 = $ array1 + $ array2;
没有好运答案 0 :(得分:4)
一种快速方法是迭代第一个数组并追加第二个数组的值:
$array1 = array('11' => 'Aa', '12' => 'Bb', '13' => 'Cc', '14' => 'Dd', '15' => 'Ee');
$array2 = array('11' => 'Cat', '13' => 'Dog', '14' => 'Donkey');
$combined = array();
foreach ($array1 as $key => $val) {
$combined[$key] = $val . (isset($array2[$key]) ? ' '.$array2[$key] : '');
}
这将遍历$array1
中的每个键/值并将其添加到$combined
数组中。如果$array2
中的值存在相同的索引,则会将其附加到$array1
的值,并以空格分隔。
更新:我误读了数组的格式(再次)。我假设ID
是数组中的实际索引,但由于示例数组输出同时具有Name
和Content
,我假设ID
是实际的索引字符串值而不是数组本身的索引。为了坚持循环场景,你可以迭代第一个数组并让嵌套循环遍历第二个:
$array1 = array(
array('ID' => '11', 'Name' => 'Aa'),
array('ID' => '12', 'Name' => 'Bb'),
array('ID' => '13', 'Name' => 'Cc'),
array('ID' => '14', 'Name' => 'Dd'),
array('ID' => '15', 'Name' => 'Ee'),
);
$array2 = array(
array('ID' => '11', 'Content' => 'Cat'),
array('ID' => '13', 'Content' => 'Dog'),
array('ID' => '14', 'Content' => 'Donkey')
);
$combined = array();
foreach ($array1 as $arr) {
$comb = array('ID' => $arr['ID'], 'Name' => $arr['Name'], 'Content' => '');
foreach ($array2 as $arr2) {
if ($arr2['ID'] == $arr['ID']) {
$comb['Content'] = $arr2['Content'];
break;
}
}
$combined[] = $comb;
}
这会将$array1
中的每个值添加到组合数组中,并且仅当$array2
中的值包含相同的ID
字段时,才会添加Content
$comb += $arr2;
}字段也是数组。这可以扩展为处理任意数量的字段,或者通过名称,或者通过更改inner-if块来代替{{1}}(这应该合并所有不存在的索引)。
答案 1 :(得分:1)
你必须自己动手:
function putThemTogether($array1, $array2) {
$output = array();
foreach($array1 as $key => $value) {
if (!isset($output[$key]))
$output[$key] = array();
$output[$key][] = $value;
}
foreach($array2 as $key => $value) {
if (!isset($output[$key]))
$output[$key] = array();
$output[$key][] = $value;
}
return $output;
}
为了使这更好,你可以使它采取任意数量的参数。
答案 2 :(得分:1)
$result = array_map (
function ($item) { return is_array($item) ? implode(' ', $item) : $item; },
array_merge_recursive($array1, $array2);
);
注意,两个数组都需要字符串键
答案 3 :(得分:0)
我希望可以尝试
function merge_two_arrays($array1,$array2) {
$data = array();
$arrayAB = array_merge($array1,$array2);
foreach ($arrayAB as $value) {
$id = $value['id'];
if (!isset($data[$id])) {
$data[$id] = array();
}
$data[$id] = array_merge($data[$id],$value);
}
return $data;
}
$master_array = merge_two_arrays($array1,$array2);