【发布时间】:2017-09-29 13:51:08
【问题描述】:
我有一个如下所示的数据库表:
uid | group | category
1 | group1 | cat1
2 | group1 | cat2
3 | group2 | cat3
4 | group2 | cat4
5 | group2 | cat5
6 | group3 | cat6
7 | group3 | cat7
但我需要将这些数据放在一个数组中,该数组按 group 对类别进行分组。
例如,我的数组应该是这样的:
Array
(
[group1] => Array
(
[0] => Array
(
[0] => 1
[1] => cat1
)
[1] => Array
(
[0] => 2
[1] => cat2
)
)
[group2] => Array
(
[0] => Array
(
[0] => 3
[1] => cat3
)
[1] => Array
(
[0] => 4
[1] => cat4
)
[2] => Array
(
[0] => 5
[1] => cat5
)
)
[group3] => Array
(
[0] => Array
(
[0] => 6
[1] => cat6
)
[1] => Array
(
[0] => 7
[1] => cat7
)
)
)
我已经写了一个 foreach 循环来做这个,但是我有一个问题。
我的问题是它总是遗漏表格的最后一行,我不知道如何解决它。在我看来,逻辑表明它应该始终有效。
我在想,在循环之后我可以将最后一行添加到新数组中,但我认为如果最后一行有不同的组,这可能会导致问题,我宁愿将解决方案内置到 foreach循环。
不幸的是,我在这里不知所措。如何修复我的代码以包含数据库查询的最后一行?
我也很想看看我可以对我当前的代码进行哪些改进,但这对于 codereview 来说可能是一个更好的问题。
我的循环:
$pass = [];
foreach($stmt as $key => $value) {
if(empty($currentGroup)) $currentGroup = $value['group'];
if(empty($temp)) $temp = [];
if($currentGroup != $value['group'] || $key+1 == count($stmt)) {
$pass[$currentGroup] = $temp;
$currentGroup = $value['group'];
$temp = [];
$temp[] = [$stmt[$key]['uid'], $stmt[$key]['category']];
} else {
$temp[] = [$stmt[$key]['uid'], $stmt[$key]['category']];
}
}
【问题讨论】: