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

如何高效将扁平关联数组按值分组为含原键的二维数组?

最高效的PHP扁平数组按值分组实现方法

刚好之前处理过类似的需求,对于你给出的场景,单次foreach循环是最高效的实现方式,没有之一。

直接上代码:

$a = array('a' => 0, 'b' => 0, 'c' => 1);
$result = [];

foreach ($a as $key => $value) {
    $result[$value][] = $key;
}

// 输出结果就是你要的:array(0 => array('a','b'), 1 => array('c'))

为什么这个方法最优?

  • 时间复杂度是O(n),只需要遍历原数组一次,没有多余的操作
  • 空间复杂度也是O(n),直接在遍历过程中构建结果数组,没有额外的中间变量
  • 原生foreach是PHP中遍历数组性能最好的方式,避免了数组函数(比如array_reduce、array_map)带来的回调函数调用开销,尤其是处理大规模数组时,这个性能差距会很明显

其他可选方法(性能稍逊)

如果偏爱函数式写法,也可以用array_reduce,但性能不如原生循环:

$result = array_reduce(array_keys($a), function($carry, $key) use ($a) {
    $carry[$a[$key]][] = $key;
    return $carry;
}, []);

不过还是那句话,追求最高效的话,直接用foreach就对了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:48:58