首先,业务需求是这样的,两个数组
$array1=[
[
'id'=>1,
'name'=>'name1'
],
[
'id'=>2,
'name'=>'name2'
],
[
'id'=>3,
'name'=>'name3'
]
];
$array2=[
[
'uid'=>1,
'uname'=>'uname1'
],
[
'uid'=>2,
'uname'=>'uname2'
],
[
'uid'=>3,
'uname'=>'uname3'
]
];将两个数组根据id和uid的值合并为一个数组,并且移除除uid。
合并之后的数组如下:
$array3=[
[
'id'=>1,
'name'=>'name1',
'uname'=>'uname1'
],
[
'id'=>2,
'name'=>'name2',
'uname'=>'uname2'
],
[
'id'=>3,
'name'=>'name3',
'uname'=>'uname3'
]
];起始急于完成任务,用了最直接的两层foreach循环。之后考虑到后期可能数据增加,两层foreach循环效率太低,于是便想出来另一种方法,经测试,效率大大提升。
代码如下:
//初始化两个数组
$array1=[];
$array2=[];
//为上面两个数组各填充一万个元素
for ($i=1; $i <= 10000; $i++) {
$array1[]=[
'id'=>$i,
'name'=>'name'.$i
];
$array2[]=[
'uid'=>$i,
'uname'=>'uname'.$i
];
}
//定义计时微秒函数
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
//=========Method 1===========
$method1_start=microtime_float();
echo "Method 1 开始时间:".$method1_start."<br />";
foreach ($array1 as $key => $value){
foreach ($array2 as $k => $v){
if ($value['id']===$v['uid']){
$temp=array_merge($value,$v);
unset($temp['uid']);
$result1[]=$temp;
}
}
}
$method1_end=microtime_float();
echo "Method 1 结束时间:".$method1_end."<br />";
// print_r($result1);
echo "*************************************************<br/>";
//=========Method 2===========
$method2_start=microtime_float();
echo "Method 2 开始时间:".$method2_start."<br />";
foreach ($array1 as $key => $value) {
$temp1[$value['id']]=$value;
}
foreach ($array2 as $key => $value) {
$temp2=array_merge($value,$temp1[$value['uid']]);
unset($temp2['uid']);
$result2[$key]=$temp2;
}
$method2_end=microtime_float();
echo "Method 2 结束时间:".$method2_end."<br />";
// print_r($result2);
从这里可以看到,第一种方法,两层foreach循环,用了10秒左右,而第二种方法用了0.01秒,差距相当的大。