如何高效将扁平关联数组按值分组为含原键的二维数组?
最高效的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
相关产品推荐
相关产品推荐

