potresti raggruppare già nel database.o ordinare per sezione e quindi scorrere e generare il codice di separazione corretto quando la sezione cambia. anche un array temporaneo è una soluzione. dato il tuo codice di esempio forse questo può indicarti una possibile directino (sebbene l'array temporaneo non sia ovviamente una soluzione elegante ma se i dati non sono così tanti non importa)
<?
$result = array();
$result[] = array('section' => 'php','note' => 'bla');
$result[] = array('section' => 'php','note' => 'bla');
$result[] = array('section' => 'perl','note' => 'bla');
$result[] = array('section' => 'java','note' => 'bla');
$grouped = array();
for($i=0;$i<count($result);$i++) {
$grouped[$result[$i]['section']][] = $result[$i]['note'];
}
print_r($grouped);
?>