首先,业务需求是这样的,两个数组

$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秒,差距相当的大。