如何在 PHP 多维数组中查找跨多个子数组重复出现的值
发布时间 - 2025-12-30 00:00:00 点击率:次本文介绍一种高效、简洁的方法,利用 php 的键值映射特性,统计多维数组中每个值出现的子数组名称,从而快速识别在两个或以上子数组中重复出现的元素。
要解决“找出在多个子数组中重复出现的值,并记录其所属子数组名”这一需求,关键在于反转数据结构视角:不采用暴力嵌套循环逐个比对,而是以值为键、以子数组名为值进行累积归集。
核心思路
遍历外层数组,对每个子数组中的每个元素,将其作为新数组 $result 的键,将当前子数组的键名(如 'arr1')追加到该键对应的数组中。PHP 的 []= 语法天然支持动态构建索引数组,无需预先初始化。
实现代码
$input = ['arr1' => ['JAN2016', 'MAI2013', 'JUN2014'], 'arr2' => ['APR2016', 'DEC2013', 'JUN2014'], 'arr3' => ['JAN2016', 'MAI2025', 'JUN2025'], ]; $result = []; foreach ($input as $subKey => $values) { foreach ($values as $value) { $result[$value][] = $subKey; } } // 过滤:仅保留出现次数 ≥ 2 的项(即跨至少两个子数组) $duplicates = array_filter($result, fn($subArray) => count($subArray) >= 2); print_r($duplicates);
输出结果:
Array
(
[JAN2016] => Array
(
[0] => arr1
[1] => arr3
)
[JUN2014] => Array
(
[0] => arr1
[1] => arr2
)
)注意事项
- ✅ 时间复杂度为 O(n),其中 n 是所有子数组元素总数,远优于嵌套比对的 O(n²);
- ✅ 自动去重:相同值在同一个子数组内重复出现时,会多次记录同一子数组名(如 'arr1' 出现两次),若需严格“跨子数组”去重,可先对各子数组调用 array_unique();
- ⚠️ 若输入含非标量值(如数组、对象),将触发 PHP 警告(因无法作为键),请确保待查值为字符串或数字;
- ? 如需进一步获取重复频次,可用 count($result[$value]) 直接读取。
此方法简洁、健壮且符合 PHP 的数组设计哲学,是处理此类“值→来源映射”问题的标准实践。
# php
# ai
# 多维数组
# count
# 字符串
# 循环
# 数据结构
# 对象
# 组中
# 值为
# 多维
# 比对
# 这一
# 多个
# 遍历
# 两次
# 将其
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在云服务器上快速搭建个人网站?
如何快速搭建高效WAP手机网站吸引移动用户?
如何选择可靠的免备案建站服务器?
制作电商网页,电商供应链怎么做?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
昵图网官网入口 昵图网素材平台官方入口
Python文件异常处理策略_健壮性说明【指导】
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Laravel如何生成URL和重定向?(路由助手函数)
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何快速配置高效服务器建站软件?
Laravel storage目录权限问题_Laravel文件写入权限设置
怎样使用JSON进行数据交换_它有什么限制
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Android Socket接口实现即时通讯实例代码
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
javascript基于原型链的继承及call和apply函数用法分析
Laravel API资源类怎么用_Laravel API Resource数据转换
JS弹性运动实现方法分析
Laravel如何处理CORS跨域请求?(配置示例)
音乐网站服务器如何优化API响应速度?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel如何实现数据库事务?(DB Facade示例)
WEB开发之注册页面验证码倒计时代码的实现
高端智能建站公司优选:品牌定制与SEO优化一站式服务
文字头像制作网站推荐软件,醒图能自动配文字吗?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
高端建站如何打造兼具美学与转化的品牌官网?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
如何挑选优质建站一级代理提升网站排名?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
在centOS 7安装mysql 5.7的详细教程
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
详解CentOS6.5 安装 MySQL5.1.71的方法
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像


'arr1' => ['JAN2016', 'MAI2013', 'JUN2014'],
'arr2' => ['APR2016', 'DEC2013', 'JUN2014'],
'arr3' => ['JAN2016', 'MAI2025', 'JUN2025'],
];
$result = [];
foreach ($input as $subKey => $values) {
foreach ($values as $value) {
$result[$value][] = $subKey;
}
}
// 过滤:仅保留出现次数 ≥ 2 的项(即跨至少两个子数组)
$duplicates = array_filter($result, fn($subArray) => count($subArray) >= 2);
print_r($duplicates);