我有两个数组,我想加入其中一个。两个数组都有一个共同的key =>值,我想将一个数组的值插入另一个数组,以便创建一个数组。
阵列1
Array ( [0] => Array ( [ID] => 123456 [Key] => 1000 [value] => 123.45 ) [1] => Array ( [ID] => 789012 [Key] => 1001 [value] => 56748.17 ) )
数组2
Array ( [0] => Array ( [Key] => 1000 [description] => desc1 ) [1] => Array ( [Key] => 1001 [description] => desc2 )
我想将数组2与数组1连接起来,以便生成的数组如下:
Array ( [0] => Array ( [ID] => 123456 [Key] => 1000 [value] => 123.45 [description] => desc1 ) [1] => Array ( [ID] => 789012 [Key] => 1001 [value] => 56748.17 [description] => desc2 ) )
因此,使用[Key]值作为井键连接数组。我查看了array_merge和其他函数,但我似乎无法让这两个数组正确“合并”。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您必须执行类似
的操作$result = array();
foreach ($a1 as $v1)
{
foreach ($a2 as $k2 => $v2)
{
if ($v1['Key'] === $v2['Key'])
{
$result[] = array_merge($v1, $v2);
unset($a2[$k2]);
break;
}
}
}
带有for循环的版本
$result = array();
$c_a1 = count($a1);
$c_a2 = count($a2);
for ($i = 0; $i < $c_a1; $i++)
{
for ($j = 0; $j < $c_a2; $j++)
{
if ($a1[$i]['Key'] === $a2[$j]['Key'])
{
$result[] = array_merge($a1[$i], $a2[$j]);
unset($a2[$j]);
$c_a2--;
break;
}
}
}
答案 1 :(得分:0)
试试这个,它是线性的
$keyval = array();
foreach($array1 as $item)$keyval[$item['Key']] = $item['value'];
foreach($array2 as $key=>$item)$array2[$key]['description'] = isset($keyval[$item['Key']]) ? $keyval[$item['Key']] : '';
答案 2 :(得分:0)
$array1[$i]
与$array2[$i]
对应,则 @radashk的解决方案将有效。从我对这个问题的解读来看,这不是保证,而是你要确保$array1[$i]['Key'] == $array2[$j]['Key']
,并将这些键匹配的元素组合起来。
可能有更优雅的解决方案,但我会这样做:
// builds up new $tmpArray, using the Key as the index
$tmpArray = array();
foreach($array1 as $innerArray1){
$tmpArray[$innerArray1['Key']] = $innerArray1;
}
//Merges the values from $array2 into $tmpArray
foreach($array2 as $innerArray2) {
if (isset($tmpArray[$innerArray2['Key']])) {
$tmpArray[$innerArray2['Key']] = array_merge($tmpArray[$innerArray2['Key']], $innerArray2);
}else{
$tmpArray[$innerArray2['Key']] = $innerArray2;
}
}
答案 3 :(得分:0)
这是我的方法:
$temp_ array = array_fill_keys (array_map(create_function('$a', 'return $a["Key"];'), $array_1) , $array_1);
$result = array();
foreach ($array_2 as $item) {
if (isset($temp_array[$item['Key']])) {
$result[] = array_merge($item, $temp_array[$item['Key']]);
}
}
我在上面的代码中进行了详细阐述,并达到了这个改进的版本:
function array_merge_items_by_common_key_value($key, $array_1, $array_2)
{
$result = array();
$temp_ array = array_fill_keys(array_map(create_function('$a', 'return $a["' . $key . '"];'), $array_1) , $array_1);
foreach ($array_2 as $item)
{
$result[$item[$key]] = isset($temp_array[$item[$key]]) ? array_merge($item, $temp_array[$item[$key]]) : $item;
}
return array_values(array_merge($result, array_diff_key($array_1, $result)));
}
$merged_arrays = array_merge_items_by_common_key_value('Key', $temp_array, $array_2);
首先,创建一个临时数组:它等于$ array_1,但它的键是要匹配的值。
然后,$ array_2循环播放。找到匹配项后,合并完成。如果没有匹配,则保持$ array_2值不受影响。
最后,$ array_1中那些未匹配的值也会附加到生成的数组中。
因此,$ array_1或$ array_2的任何项目都不会丢失,而匹配的项目会合并。