Creo que te facilitaria mucho las cosas guardando en array similar al primer ejemplo que pusiste y que es la sugerencia de
GatorV, porque despues recorres de una manera sencilla:
Código PHP:
Ver originalforeach($nombres as $grupo => $grupos) {
echo "<h2>$grupo</h2>";
// Aqui puedes abrir contenedor para apellidos
foreach($grupos as $apellido => $nombres2) {
echo "<h2>$apellido</h2>";
echo '<ul>';
foreach($nombres2 as $nombre) {
echo "<li>$nombre</li>";
}
echo '</ul>';
}
// Aqui cierras contenedor para apellidos (si lo creaste)
}