PHP如何从两个不同数组中提取以delivery_type_id为匹配依据的公共元素
解决方案
方案1:哈希过滤法(性能最优,适合数据量较大的场景)
先将数组2的delivery_type_id提取为键名哈希表,再直接过滤数组1即可:
// 提取数组2的所有delivery_type_id,转为以id为键的哈希表,提高查询效率 $validIds = array_flip(array_column($array2, 'delivery_type_id')); // 过滤数组1,保留存在于哈希表中的元素 $result = array_filter($array1, function($item) use ($validIds) { return isset($validIds[$item['delivery_type_id']]); }); // 可选:重置数组索引为0开始的连续数字 $result = array_values($result);
输出的$result就是你需要的结构。
方案2:基于array_uintersect的原生函数实现
如果想用系统内置的交集函数,可以用支持自定义比较规则的array_uintersect:
$result = array_uintersect($array1, $array2, function($a, $b) { return $a['delivery_type_id'] <=> $b['delivery_type_id']; }); $result = array_values($result);
你之前使用
array_intersect失败的原因是:该函数默认直接对比数组整体的序列化字符串结果,不会单独匹配指定的delivery_type_id字段,因此需要用支持自定义比较逻辑的array_uintersect才能实现需求。
内容的提问来源于stack exchange,提问作者Alok Kumar
相关产品推荐
相关产品推荐

