如何在 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英寸大直屏和旗舰级影像