如何通过键组合两个数组?
例如: -
数组1:
array (
array (
'id' => '1',
'A' => 'ABC'
),
array (
'id' => '2',
'A' => 'DEF'
)
)
数组2:
array (
array (
'id' => '2',
'B' => '456'
)
array (
'id' => '1',
'B' => '123'
),
)
组合数组:
array (
array (
'id' => '1',
'A' => 'ABC',
'B' => '123'
),
array (
'id' => '2',
'A' => 'DEF',
'B' => '456'
)
)
组合数组顺序并不重要,但它应该基于提供的字段而不是自然顺序匹配。
我尝试了什么。看起来并不高效。public function combineArraysByKey($array_1, $array_2, $key = 'id')
{
$combined_array = array();
foreach($array_1 as $sub_array_1) {
foreach($array_2 as $sub_array_2) {
if ($sub_array_1[$key] == $sub_array_2[$key]) {
$merged_sub_array = array_merge($sub_array_1, $sub_array_2);
array_push($combined_array, $merged_sub_array);
}
}
}
return $combined_array;
}
答案 0 :(得分:2)
试试这样: -
<?php
$array1 = array (
array (
'id' => '1',
'A' => 'ABC'
),
array (
'id' => '2',
'A' => 'DEF'
)
);
$array2 = array (
array (
'id' => '2',
'B' => '456'
),
array (
'id' => '1',
'B' => '123'
),
);
function combineArraysByKey($array1, $array2)
{
foreach($array1 as $key => $value){
foreach($array2 as $key1 => $value2){
if($value['id'] === $value2['id']){
unset($value2['id']);
$remaining_key = array_keys($value2);
$array1[$key][$remaining_key[0]] = $value2[$remaining_key[0]];
}
}
}
return $array1;
}
$new_array = combineArraysByKey($array1, $array2);
echo "<pre/>";print_r($new_array);
?>
输出: - https://eval.in/374523
答案 1 :(得分:1)
[我的代码]看起来并不高效。
您只需要在两个阵列中的每个阵列上循环一次。
在您的示例函数中,嵌套循环内的代码将运行count($array_1) * count($array_2)
次。而在每个阵列上循环一次只会count($array_1) + count($array_2)
次。
(显然,当每个阵列中只有2个项目时,数字是相同的,但很快就会节省开支。)
因此,在代码中,替代方案可能是:
$combined_array = array();
foreach(array($array_1, $array_2) as $rows) {
foreach($rows as $row) {
$current_key = $row[$key];
if (array_key_exists($current_key, $combined_array)) {
$combined_array[$current_key] += $row;
} else {
$combined_array[$current_key] = $row;
}
}
}
return $combined_array;