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

如何获取两个结构不同数组的共有user_id,适配array_intersect或替代嵌套循环

高效解决方案

以下两种方案时间复杂度均为O(n+m),性能远优于嵌套循环的O(nm)*,适合大数据量场景使用:


方案1:哈希表匹配(性能最优)

利用PHP关联数组底层的哈希表结构,将单次查找的时间复杂度降到O(1):

  1. 遍历第一个数组,将所有user_id作为关联数组的键存储,值可统一设为true
  2. 遍历第二个数组,判断当前元素的user_id是否存在于上述关联数组中,存在即属于交集
    代码示例:
// $arr1、$arr2为你的两个异构数组,按实际结构取user_id即可
$userIdHash = [];
foreach ($arr1 as $item) {
    $userId = $item['user_id']; // 对象数组可改为$item->user_id
    $userIdHash[$userId] = true;
}

$commonUserIds = [];
foreach ($arr2 as $item) {
    $userId = $item['user_id'];
    if (isset($userIdHash[$userId])) {
        $commonUserIds[] = $userId;
        // 如果需要对结果去重,可加一行unset($userIdHash[$userId]);
    }
}

方案2:适配array_intersect原生函数

先把两个数组的user_id单独提取为一维纯值数组,即可直接调用原生array_intersect计算交集:

// 提取两个数组的user_id为一维索引数组,对象数组同样支持array_column提取
$userIds1 = array_column($arr1, 'user_id');
$userIds2 = array_column($arr2, 'user_id');

// 直接计算得到同时存在的user_id交集
$commonUserIds = array_intersect($userIds1, $userIds2);

参考结构示例

数组1结构
数组2结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:09:04