0

0

PHP 查找数组中所有配对元素

冷炫風刃

冷炫風刃

发布时间:2026-03-11 21:30:02

|

710人浏览过

|

来源于php中文网

原创

php中“配对元素”指出现次数≥2的值,用array_count_values()统计频次,array_filter()筛选≥2的键,array_keys()提取值,如[1,2,2,3,3,3,4,4,4,4]返回[2,3,4]。

php 查找数组中所有配对元素

要查找 PHP 数组中所有“配对元素”,通常指找出出现次数为偶数次(如 2 次、4 次等)的值,或更常见的是:找出数组中能两两配对(即每个值出现偶数次)、剩余无法配对的“落单”元素——这在算法题中常用于找唯一出现奇数次的元素。但你问的是“所有配对元素”,我们按最实用的两种理解来展开:

统计每个值的出现次数,筛选出出现 ≥2 次且为偶数次的元素

这是最直观的“配对”含义:一个值至少出现 2 次,才能组成至少一对;若出现 4 次,可组成两对,仍算“可配对”。注意:是否要求严格偶数次(如只取 2/4/6…),还是只要 ≥2 即可(含 3 次?3 次只能凑 1 对 + 1 个落单),需明确。以下按「出现次数 ≥2」并**列出所有可参与配对的值(去重)**为例:

  • array_count_values() 统计频次
  • array_filter() 筛选计数 ≥2 的键
  • array_keys() 提取这些值本身(即配对元素)

示例代码:

$arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4];
$counts = array_count_values($arr);
$pairedValues = array_keys(array_filter($counts, function($c) { return $c >= 2; }));
// 结果:[2, 3, 4] —— 它们都至少出现 2 次,可形成至少一对

找出所有具体的配对索引位置(如 [i,j] 满足 $arr[i] === $arr[j] 且 i

如果你需要的是“哪些下标组成了相等值的配对”,比如用于匹配游戏、去重逻辑或调试,则需遍历生成所有无序索引对:

立即学习PHP免费学习笔记(深入)”;

一帧秒创
一帧秒创

基于秒创AIGC引擎的AI内容生成平台,图文转视频,无需剪辑,一键成片,零门槛创作视频。

下载
  • 双层 for 循环:外层 $i 从 0 到 count-2,内层 $j 从 $i+1 到 count-1
  • 比较 $arr[$i] === $arr[$j],成立则保存 [$i, $j]
  • 注意:此方法时间复杂度 O(n²),小数组适用;大数组建议先分组索引再组合

优化版(推荐):

$arr = ['a', 'b', 'a', 'c', 'b', 'a'];
$positions = [];
foreach ($arr as $i => $val) {
    $positions[$val][] = $i;
}
$pairs = [];
foreach ($positions as $val => $indices) {
    if (count($indices) >= 2) {
        for ($i = 0; $i < count($indices)-1; $i++) {
            for ($j = $i+1; $j < count($indices); $j++) {
                $pairs[] = [$indices[$i], $indices[$j]];
            }
        }
    }
}
// $pairs 包含所有相同值的索引对,如 ['a'→[0,2], [0,5], [2,5]]

仅保留能完全配对的元素(每个值出现偶数次),丢弃落单项

例如输入 [1,1,2,3,3,4,4,4],其中 1 和 3 出现偶数次(可完全配对),2 和 4 不满足(2 出现 1 次,4 出现 3 次),则结果应为 [1,1,3,3]。实现方式:

  • 统计频次 → 筛选 value % 2 === 0 的值 → 用 array_fill_keys 或循环重建数组
  • 更简洁:用 array_reduce 遍历原数组,维护一个“待配对集合”,遇到就添加,已有就移除(类似异或逻辑),但那是找落单项;此处需先统频再展开

示例:

$arr = [1,1,2,3,3,4,4,4];
$counts = array_count_values($arr);
$result = [];
foreach ($counts as $val => $cnt) {
    if ($cnt % 2 === 0) {
        $result = array_merge($result, array_fill(0, $cnt, $val));
    }
}
// $result = [1,1,3,3]

注意事项与边界情况

实际使用时需考虑:

  • 数据类型:array_count_values() 要求值为 string/int/float/bool,null 或数组会警告
  • 大小写与类型敏感:'1' 和 1 被视为不同;'A' 和 'a' 不同,需提前 normalize
  • 性能:超大数组(>10⁵ 元素)避免嵌套循环,优先用哈希分组
  • 空数组或无配对:返回空数组 [],不是 null 或 false,注意业务逻辑判空

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

336

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

224

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

595

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

106

2025.10.23

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.3万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号