$menu[$i] te lo da vuoto perchè il tuo array non ha indici numerici, gli indici del tuo array menu dell'esempio sono opzioni e operazioni, quindi per recuperare il loro valore devi fare riferimento a $menu["opzioni"] e menu["operazioni"].

Per recuperare dinamicamente le chiavi di un array esiste la funzione array_keys(array) che restituisce un array con le chiavi dell'array dell'argomento (scusa gioco di parole...), per esempio se fai:

$chiavi=array_keys($menu);

l'array chiavi (che ha indice numerico) sarà del tipo:

$chiavi[0]=>opzioni
$chiavi[0]=>operazioni

una volta che hai un array di chiavi puoi ciclare per prendere dinamicamente il valore dell'array, considerando che hai due array con indici non numerici la questione si complica; ti faccio un esempio semplice, metti che tu abbia

$arr=array("a"=>"primovalore","b"=>"secondovalore" );

per recuperare i valori senza conoscere i nomi delle chiavi puoi fare:

$chiavi=array_keys($arr);
for ($i=0;$i<count($chiavi);$i++)
print($arr[$chiavi[$i]]);

comunque quando lavori con gli array è comodo conoscere anche la funzione print_r(array) che ti stampa automaticamente tutto l'array, così puoi sempre vedere facilmente che c'è dentro