通过相同的键合并两个关联数组 [英] Merge two associative arrays by same key
问题描述
我有两个具有一个共同值的关联数组,例如
I have two associative array having one value in common, like
ARRAY 1(
[0]=>
array(2) {
["ID"]=> "AAAA"
["Name"]=> "Apple"
}
[1]=>
array(2) {
["ID"]=> "BBBB"
["Name"]=> "Avocado"
}
[3]=>
array(2) {
["ID"]=> "CCCC"
["Name"]=> "Banana"
}
)
Array2 (
[0]=>
array(4) {
["ID"]=> "AAAA"
["Taste"]=> "Yumi"
["Location"]=> "France"
["Price"]=> "Cheap"
}
[1]=>
array(4) {
["ID"]=> "CCCC"
["Taste"]=> "Yumi"
["Location"]=> "Africa"
["Price"]=> "Cheap"
}
[3]=>
array(4) {
["ID"]=> "BBBB"
["Taste"]=> "Yumi"
["Location"]=> "America"
["Price"]=> "Expansive"
}
[3]=>
array(4) {
["ID"]=> "HZGA"
["Taste"]=> "Berk"
["Location"]=> "Moon"
["Price"]=> "Expansive"
}
)
我想通过它们的ID合并它们. 简单合并是不可能的,因为它们没有排序,具有40.000 +个值并且大小不相同.
I would like to merge them both by their ID. A simple merge isn't possible because they arn't sorted, have 40.000 + values and don't have the same size.
我计划使用double foreach,并在ID通用的情况下创建第三个数组,所以我放弃了这个想法.由于必须为第二个数组中的40.000个值分别解析第一个数组中的40.000个值,因此花费了太长的时间.
I planned to use a double foreach, and create a third array were the ID was common, I dropped the idea. Since having to parse 40.000 values in the first array for each of the 40.000 values from the second array take too long.
有什么解决方法吗?我希望最终看起来像这样:
Is there some solution ? I would like to having it look like this at final :
ArrayFinal (
[0]=>
array(4) {
["ID"]=> "AAAA"
["Name"]=> "Apple"
["Taste"]=> "Yumi"
["Location"]=> "France"
["Price"]=> "Cheap"
}
[1]=>
array(4) {
["ID"]=> "CCCC"
["Name"]=> "Banana"
["Taste"]=> "Yumi"
["Location"]=> "Africa"
["Price"]=> "Cheap"
}
[3]=>
array(4) {
["ID"]=> "BBBB"
["Name"]=> "Avocado"
["Taste"]=> "Yumi"
["Location"]=> "America"
["Price"]=> "Expansive"
}
)
推荐答案
您不可避免地要循环.但是foreach非常快.在50.000的数组上进行测试,耗时0.04秒.
You cannot avoid to loop. But foreach is pretty fast. Tested on an array of 50.000 and it took 0.04 seconds.
这将要做的是:
- 创建TMP阵列
- 从ARRAY1获取KEY和ID值
- 将它们作为TMP阵列中的"ID" =>键
- 循环ARRAY2,获取ID
- 在TMP中查找相应的ID
- 从ARRAY1获取密钥
- 合并ARRAY1和ARRAY2
您将最终获得具有来自ARRAY2的数据的ARRAY1
You'll end up with ARRAY1 having the data from ARRAY2
$ar1=[...]; //original array 1
$ar2=[...]; //original array 2
// get ID=> key pairs
$kv=[];
foreach($ar1 as $k => $v){
$kv[ $v['id'] ] = $k;
}
// loop ARRAY2
foreach($ar2 as $k => $v){
if( array_key_exists( $v['id'] , $kv ) ){
$ar1[ $kv[$v['id']] ] = array_merge( $ar1[$kv[$v['id']]] , $ar2[$k] );
}
}
这篇关于通过相同的键合并两个关联数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!