新闻中心
php中array_uintersect自定义比较求交集_php多数组交集复杂规则与排序保持
array_uintersect用于通过自定义比较函数计算多个数组的交集,保持第一个数组的顺序。1. 它适用于元素为对象或关联数组等复杂结构,需用户定义比较逻辑。2. 比较函数返回0表示相等,仅当元素在所有数组中均匹配时才保留。3. 该函数天然维持首个数组的元素顺序,适合有序数据处理场景。4. 对三个以上数组求交集可通过循环或递归方式逐次应用array_uintersect实现。

在PHP中,当你需要根据复杂规则比较多个数组的元素来求交集,并且希望保持第一个数组的顺序时,array_uintersect 是一个非常有用的函数。它允许你使用自定义的比较函数,适用于数组元素为对象或关联数组等无法通过默认方式比较的场景。
array_uintersect 基本用法
该函数用于计算两个或多个数组的交集,但元素的比较是通过用户提供的回调函数完成的。只保留在第一个数组中出现,并且能在其他数组中找到“相等”元素的项。
array_uintersect(array $array1, array $array2, ..., callable $value_compare_func): array$value_compare_func 接收两个参数,返回整数:小于0表示前者小,0表示相等,大于0表示前者大 —— 类似于 strcmp 或 usort 的比较方式。
按复杂规则求交集(例如比较关联数组)
假设你有两个用户数组,每个用户是一个关联数组,你想根据姓名和年龄判断是否为同一人:
$userList1 = [
['name' => 'Alice', 'age' => 25],
['name' => 'Bob', 'age' => 30],
['name' => 'Charlie', 'age' => 35]
];
$userList2 = [
['name' => 'Alice', 'age' => 25],
['name' => 'D*id', 'age' => 40],
['name' => 'Charlie', 'age' => 36] // 年龄不同
];
$result = array_uintersect($userList1, $userList2, function($a, $b) {
if ($a['name'] === $b['name'] && $a['age'] === $b['age']) {
return 0;
}
return ($a['name'] . $a['age']) <=> ($b['name'] . $b['age']);
});
// 输出: 只有 Alice 25 满足完全相等
print_r($result);
注意:即使名字相同但年龄不同,也不会被视为“相等”。比较函数必须严格返回0才表示匹配。
保持第一个数组的顺序
array_uintersect 天然保留第一个数组的元素顺序。只要某个元素在所有其他数组中都能找到“相等”项(通过你的比较函数判定),就会被保留,且位置与原数组一致。
N世界
一分钟搭建会展元宇宙
138
查看详情
这在处理有序数据(如按时间排序的日志、用户列表)时特别有用,无需额外排序。
比如你有一组推荐商品,按优先级排序,只想保留那些同时存在于库存中的商品,使用自定义比较可以确保输出仍按推荐顺序排列。
多数组交集的实现技巧
PHP没有直接提供 array_uintersect 对三个及以上数组的同时支持,但你可以通过递归或循环逐步处理:
function multi_array_uintersect($arrays, $compare_func) {
if (count($arrays) < 2) {
return $arrays ? reset($arrays) : [];
}
$result = array_shift($arrays);
foreach ($arrays as $arr) {
$result = array_uintersect($result, $arr, $compare_func);
}
return $result;
}
// 使用示例
$commonUsers = multi_array_uintersect([$userList1, $userList2, $userList3], $compare_func);
这样就可以实现多个数组基于相同规则的交集运算。
基本上就这些。array_uintersect 配合自定义比较函数,能灵活应对各种复杂交集需求,尤其是当标准 == 不足以表达“相等”时。关键是写好比较逻辑,并理解它只保留第一个数组中的元素。不复杂但容易忽略细节。
以上就是php中array_uintersect自定义比较求交集_php多数组交集复杂规则与排序保持的详细内容,更多请关注其它相关文章!
# 是一个
# 横沥营销型网站建设
# 东莞搜狗seo哪家好
# 京东关键词下排名在哪看
# seo实习日志总结
# 江门专业网站推广有哪些
# seo快速排名网站优化平台
# 合肥出口营销推广策划招聘
# 如何做视频营销网站推广
# 黑马网站建设文案怎么写
# 蚌埠网络推广营销策划
# 就会
# php
# 你有
# 适用于
# 上传
# 回调
# 组中
# 多个
# 自定义
# 递归
# 排列
# 回调函数
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
生成rdflib自定义SPARQL函数:参数匹配与实践指南
Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
QQ网页版官方账号入口 QQ网页版网页版登录指南
J*aScript中高效管理与清空动态列表:避免循环陷阱
知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法
小米汽车11月交付量突破40000台!雷军:将继续努力
如何在 Windows 11 中启动游戏手柄设置
抖音极速版最新版本 抖音极速版官方下载地址
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站
Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践
J*aScript生成器_j*ascript异步迭代
抖音网页版平台入口 抖音网页版官网在线访问教程
steam官方入口大全 steam账号注册及操作指南
京东单号查询入口_京东快递订单追踪入口
UC浏览器官网入口2025最新 UC浏览器网页版正式地址
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
Centos/Linux 系统下安装 composer 的完整步骤
Excel Power Pivot如何处理XML数据源 构建高级数据模型
sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
PDF文件体积过大处理_PDF压缩技巧详解
淘宝支付提示失败如何解决 淘宝支付流程优化方法
在Pyomo中实现基于变量的条件约束:Big-M方法详解
12306选座怎么选到商务座_12306商务座选择与配置说明
微信网页版官方入口直达 微信网页版网页版登录使用方法
蛙漫官方正版入口 蛙漫网页在线全集免费观看
J*aScriptWebpack优化_J*aScript构建工具实战
利用5118提升短视频内容效果_5118短视频关键词优化方法
在python-socketio事件处理器中安全访问Flask应用上下文
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
126邮箱手机版登录官网2026_126手机邮箱免费入口最新
Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】
EMS快递官网app_中国邮政速递物流手机客户端
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
微博网页版首页入口 微博电脑端官网登录链接
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
自定义Bag-of-Words实现:处理带负号的词汇权重
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
顺丰国际快递查询 国际件官方查询入口
J*aScript打印功能_j*ascript输出控制
HTML长属性值处理:表单action路径优化与代码规范应对
如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension


2025-11-28
浏览次数:次
返回列表
['name' => 'Alice', 'age' => 25],
['name' => 'D*id', 'age' => 40],
['name' => 'Charlie', 'age' => 36] // 年龄不同
];
$result = array_uintersect($userList1, $userList2, function($a, $b) {
if ($a['name'] === $b['name'] && $a['age'] === $b['age']) {
return 0;
}
return ($a['name'] . $a['age']) <=> ($b['name'] . $b['age']);
});
// 输出: 只有 Alice 25 满足完全相等
print_r($result);