PHP实现WordPress wp_query输出二维数组按多字段分组求和
原代码问题分析
- 遍历
$vysledna_tabulka时默认采用值传递,修改$vysledny_radek不会同步修改结果数组中的实际元素,求和操作不会生效 - 逻辑存在漏洞:只要当前遍历的结果条目和待处理条目不匹配就给
$aktualni赋值,无论是否已经找到匹配的分组,最后都会强制插入新条目,导致结果数组出现大量重复数据,求和完全失效 - 嵌套循环实现时间复杂度为O(n²),数据量大时性能极差
最优实现方案
用「0、1、2三个值拼接的唯一字符串」作为临时索引数组的键,单次遍历即可完成分组求和,时间复杂度为O(n),性能远高于嵌套循环实现:
$temp = []; foreach ($seznam_vsech_hracu_vsech_tymu as $item) { // 拼接联合主键作为临时键,分隔符选不会出现在团队、姓名中的字符即可 $key = $item[0] . '|' . $item[1] . '|' . $item[2]; if (isset($temp[$key])) { // 已存在该分组,累加下标3的数值 $temp[$key][3] = (string)((int)$temp[$key][3] + (int)$item[3]); } else { // 不存在该分组,新增条目 $temp[$key] = $item; } } // 重置键名得到最终结果数组,键名从0开始连续 $vysledna_tabulka = array_values($temp);
运行后$vysledna_tabulka就是符合要求的分组求和结果,和示例输出结构完全一致。
内容的提问来源于stack exchange,提问作者Eduard
相关产品推荐
相关产品推荐

