在开发中我们经常会遇到两个数组的合并算法需求,如下面的数组类型
$aArray =[
0=>[
'userid' =>1,
'username' => '张三',],
1=>[
'userid' =>2,
'username' => '李四'],
2=>[
'userid' =>3,
'username' => '狗木头',]
];
$bArray =[
0=>[
'userid' =>1,
'age' => '18',],
1=>[
'userid' =>2,
'age' => '20',],
2=>[
'userid' =>3,
'age' => '3',]
];
在开发过程中经常会有类似的数组结构,此时我们会需要用到foreach循环来做合并处理或者是计算一类的操作,如果我们采用双层循环的方式,时间复杂度为x*y,代码如下
foreach ($aArray as $val){
foreach ($bArray as $value){
if($val['userid'] == $value['userid']){
$val['age'] = $value['age'];
}
}
}
这种做法在数组数据量比较大的时候效率不尽如人意,所以可以使用另一种做法将时间复杂度降低到x+y,代码如下
$aTemp = [];
foreach ($bArray as $value){
$aTemp[$value['userid']] = $value;
}
foreach ($aArray as $val){
$val['age'] = $aTemp[$val['userid']];
}