con la sentencia
array_multisort puedes ordenar un array por distintas columnas, en este caso seria por la columna "idcategoria".
una vez ordenado el array puedes recorrerlo y detectar cuando cambia de categoria.
de todas formas es un tema complicado.