Convertir una matriz plana en una matriz agrupada por categorías

Tengo una tabla de base de datos que se ve así:

uid | group  | category
1   | group1 | cat1
2   | group1 | cat2
3   | group2 | cat3
4   | group2 | cat4
5   | group2 | cat5
6   | group3 | cat6
7   | group3 | cat7

Pero necesito estos datos en una matriz, que agrupa las categorías por susgroup.

Por ejemplo, mi matriz debería verse así:

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
                )

        )

)

He escrito un bucle foreach que hace exactamente esto, pero tengo un problema.

Mi problema es que siempre deja fuera la última fila de la tabla, y no estoy seguro de cómo solucionarlo. En mi opinión, la lógica dicta que siempre debería funcionar.

Estaba pensando que después del ciclo podría agregar la última fila a la nueva matriz, pero creo que eso puede causar problemas si la última fila tiene un grupo diferente, y preferiría que la solución se integrara en el ciclo foreach.

Lamentablemente, estoy perdido aquí. ¿Cómo puedo arreglar mi código para incluir la última fila de la consulta de la base de datos?

También me interesaría ver qué mejoras puedo hacer en mi código actual, pero esa puede ser una mejor pregunta para la revisión de código.

Mi bucle

$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']];
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta