EDIT: per ora ho risolto con una funziona di callback, ma è lenta.

Codice PHP:
if ( $annate ) {
    
$anni = [];
    
array_walk_recursive$annate, function($valore) use (&$anni) {
            if (
in_array($valore$anni) === false$anni[] = $valore;
    });
    
$listaAnni '';
    foreach( 
$anni as $anno )
        
$listaAnni .= "<li><a href=\"registri.php?viz=1&reg=leg&anno=$anno\">Anno $anno</a></li>\n";

Dove:
  • $annate è l'array che contiene gli anni così come risultano dopo la query;
  • $anni è un array di comodo in cui finiranno gli anni "validi";
  • nella funzione, se il valore passato al momento non esiste dentro l'array $anni, vi viene aggiunto;
  • $listaAnni è la lista per il menù;
  • compila la lista per la dropbox ciclando all'array $anni.


Problemi? Sì, uno solo, è lenta perché deve ciclare l'intero archivio di anni contenuto in $annate.
Per ora c'è solo il 2020 con già 3566 valori, il 2021 solo uno creato per le prove, ma a fine anno si prevede un numero molto alto, e se è già lento così, è chiaro che il tutto è solo un ripiego.

La vera soluzione deve venire dall'SQL ma per ora non so che query invocare.