分组逻辑中避免深度嵌套代码
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'];
}
其实我找到了更好的方法。在循环开始时,我没有验证所有的组中断,而是只验证最后一个。如果最后一个改变了,那么之前的所有其他的也必须更新是合乎逻辑的。这简化了我的代码。但我总是乐于接受建议和其他示例。谢谢。
我需要一些建议或建议的做法。
我有一个多字段(六个或更多)分组 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'];
}
其实我找到了更好的方法。在循环开始时,我没有验证所有的组中断,而是只验证最后一个。如果最后一个改变了,那么之前的所有其他的也必须更新是合乎逻辑的。这简化了我的代码。但我总是乐于接受建议和其他示例。谢谢。