如何在PHP中按CONSECUTIVO_GRUPO对多维数组进行分组
解决方案:按
CONSECUTIVO_GRUPO分组重构数组 你的问题出在原代码每次循环都创建独立的分组对象,没有把同CONSECUTIVO_GRUPO的条目合并到同一分组里。要实现需求,核心思路是用CONSECUTIVO_GRUPO作为临时数组的键,聚合同组的RESPUESTAS项,最后整理成目标格式。
修正后的PHP代码
$result = []; foreach ($rsp as $answer) { // 用CONSECUTIVO_GRUPO作为分组标识键 $groupKey = $answer['CONSECUTIVO_GRUPO']; // 首次遇到该分组时,初始化基础结构 if (!isset($result[$groupKey])) { $result[$groupKey] = [ "CONSECUTIVO" => $answer['CONSECUTIVO_GRUPO'], "GRUPO" => $answer['ID_GRUPO'], "RESPUESTAS" => [] ]; } // 将当前条目的[CODIGO, ID_MODULO, VALOR]追加到对应分组的RESPUESTAS中 $result[$groupKey]['RESPUESTAS'][] = [ $answer['CODIGO'], $answer['ID_MODULO'], $answer['VALOR'] ]; } // 去掉临时分组键,得到纯顺序数组(不需要的话可省略此步) $result = array_values($result); // 若要输出JSON格式,执行以下代码 // echo json_encode($result, JSON_PRETTY_PRINT);
代码说明
- 用
CONSECUTIVO_GRUPO作为临时数组的键,确保相同分组的条目被聚合到同一对象下 - 首次遇到某分组时,初始化该分组的
CONSECUTIVO、GRUPO字段和空的RESPUESTAS数组 - 后续同分组的条目,直接把
[CODIGO, ID_MODULO, VALOR]追加到对应分组的RESPUESTAS数组里 - 最后用
array_values()重置数组索引,去掉临时分组键(如果不需要纯顺序数组可省略)
输出示例(JSON格式)
[ { "CONSECUTIVO": "1", "GRUPO": "39", "RESPUESTAS": [ ["447","20","2023-09-05"], // 同组其他条目... ] }, { "CONSECUTIVO": "2", "GRUPO": "1", "RESPUESTAS": [ ["94","76","..."], // 同组其他条目... ] } ]
内容的提问来源于stack exchange,提问作者AlJw
相关产品推荐
相关产品推荐

