You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中匹配两个多维数组的ID?

PHP数组按ID匹配合并的解决方法

嘿,针对你这两个需要按ID匹配合并的PHP数组,我给你整理了几种实用的解决办法,都是日常开发里常用的,你可以根据自己的PHP版本和数组规模来选:

方法一:高效键映射法(推荐)

这种方法先把第二个数组转换成以id为键的关联数组,后续查找匹配项的效率是O(1),特别适合处理大数据量的情况。

// 先将$dizi2转换为以id为键的数组,快速定位生日数据
$dizi2ById = array_column($dizi2, null, 'id');

// 遍历$dizi1,匹配对应ID的生日信息
foreach ($dizi1 as &$user) {
    // 检查是否存在对应ID的生日数据,存在则合并
    if (isset($dizi2ById[$user['id']]['birthday'])) {
        $user['birthday'] = $dizi2ById[$user['id']]['birthday'];
    }
}
unset($user); // 释放引用,防止后续代码意外修改原数组元素

// 输出合并后的结果
print_r($dizi1);

说明:array_column($dizi2, null, 'id')会把$dizi2里的每个元素以其id值作为新数组的键,这样我们不需要嵌套循环,直接通过ID就能快速找到对应的生日数据,性能比嵌套循环好很多。

方法二:PHP 7.4+简洁写法

如果你用的是PHP 7.4及以上版本,可以结合箭头函数和null合并运算符,写出更简洁的代码:

// 先提取$dizi2里的id和生日,生成id=>birthday的映射
$birthdayMap = array_column($dizi2, 'birthday', 'id');

// 用array_map遍历$dizi1,合并生日数据
$mergedArray = array_map(fn($user) => array_merge($user, [
    'birthday' => $birthdayMap[$user['id']] ?? null
]), $dizi1);

print_r($mergedArray);

说明:?? null是null合并运算符,当对应ID的生日不存在时,会给birthday赋值为null,避免出现未定义索引的警告。箭头函数让代码更紧凑,可读性也不错。

方法三:基础嵌套循环法(适合小数组)

如果你的数组规模很小,也可以用最直观的嵌套循环来实现,虽然性能不如前两种,但胜在容易理解:

foreach ($dizi1 as &$user) {
    foreach ($dizi2 as $birthdayData) {
        if ($user['id'] === $birthdayData['id']) {
            $user['birthday'] = $birthdayData['birthday'];
            break; // 找到匹配项后立即跳出内层循环,减少不必要的遍历
        }
    }
}
unset($user);

print_r($dizi1);

说明:这种方法需要两层循环,数组元素越多,性能越差,所以只推荐在处理少量数据时使用。


内容的提问来源于stack exchange,提问作者Cugurel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:09:36