Yo creo que la segunda es la más eficiente.
Esto porque el switch se evalúa una sola vez y luego se ejecuta un foreach con sus acciones.
En el primer caso, se ejecuta un foreach y para cada elemento se evalúa el switch.
Mejor dicho, si la variable a evaluar en el switch no depende de lo que contenga el array que pasas por el foreach (como en este caso), mejor lo evalúas primero.
No tiene sentido estarse preguntando a cada momento $letra=="A"??, $letra=="B"??, etc... basta con evaluarlo una vez.
Otra cosa sería si esa variable $letra dependiera de $dato... ahí sí habría que evaluarla y definitivamente se tendría que utilizar el primer caso.
Saludos