You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP:如何高效获取数组中重复值对应的键并分组存储

高效获取PHP数组中重复值的所有键分组

这是一个很常见的PHP数组处理需求,最高效的实现方式是一次遍历构建值与对应键列表的映射,再过滤出包含多个键的分组,具体代码和解释如下:

核心实现代码

$a = array( "0" => "red", "1" => "green" , "2" => "red" , "3" => "blue", "4" => "blue", "5" => "blue" );

// 1. 遍历原数组,构建「值 → 对应所有键的列表」的映射
$valueKeyMap = [];
foreach ($a as $key => $value) {
    $valueKeyMap[$value][] = $key;
}

// 2. 过滤掉仅包含单个键的分组,只保留重复值对应的键列表
$duplicateKeyGroups = array_filter($valueKeyMap, function($keys) {
    return count($keys) > 1;
});

// 可选:重置结果数组的索引为连续数字(和示例结构完全匹配)
$duplicateKeyGroups = array_values($duplicateKeyGroups);

// 输出结果
print_r($duplicateKeyGroups);

为什么这是最高效的方法?

  • 时间复杂度最优:整个过程只需要遍历原数组一次(O(n)复杂度),后续的过滤和索引重置都是线性操作,没有嵌套循环。相比其他方法(比如先取唯一值再逐个遍历找键,时间复杂度为O(n*m),m是唯一值数量),在数组规模较大时效率差异会非常明显。
  • 空间开销合理:用一个临时数组存储映射关系,空间复杂度为O(n),这是实现需求必须的开销,没有冗余存储。

输出结果说明

运行上述代码后,会得到完全符合你期望的结构:

Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 2
        )

    [1] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 5
        )

)

内容的提问来源于stack exchange,提问作者Andreasschnetzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:02