分组逻辑中避免深度嵌套代码

Avoid deep nesting code in grouping logic

我需要一些建议或建议的做法。

我有一个多字段(六个或更多)分组 SQL 查询。我以正确的顺序得到了预期的结果。

我对此的默认方法是迭代保存最后一个循环元素的有序结果,以便在下一次迭代时对其进行测试。如果它改变了,那么我将它添加到结果列表中并继续。我认为这是解决此类问题的常用方法。

最多两个字段,我觉得我的做法没问题。但是当我按两个以上的字段分组时,它似乎过于复杂了。随着嵌套条件数量的增加,代码开始腐烂并且看起来难以维护。

有没有更好的方法来完成这个?

我的默认方法(一个字段)

    $groupOne = null;
    $lastId = null;
    $result = array();

    foreach($orderedData as $item) {
        if ($lastId !== $item['id']) {
            if ($groupOne !== null) {
                $resultList[] = $groupOne;
            }
            $groupOne = new stdClass();
        }

        //rest of the logic

        $lastId = $item['id'];
    }

其实我找到了更好的方法。在循环开始时,我没有验证所有的组中断,而是只验证最后一个。如果最后一个改变了,那么之前的所有其他的也必须更新是合乎逻辑的。这简化了我的代码。但我总是乐于接受建议和其他示例。谢谢。