Или, если для третьего параметра установлено значение true, вы получите:
я есть таблица базы данных, которая выглядит так:
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.
К сожалению, я в растерянности. Как я могу исправить свой код, чтобы включить самую последнюю строку запроса к базе данных?
Мне также было бы интересно посмотреть, какие улучшения я могу сделать в моем текущем коде, но это может быть лучшим вопросом для пересмотра кода.
Моя петля:
$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']];
}
}