Мда, я просто увидев ${"year[$i]"}, сразу подумал (и ответил) что нужно (или по крайней мере желательно) выносить "сложные" конструкции переменных (а-ля $c->var, $a['var'] ) из строки, пхп не во всех слуйчаях их коректно находит.
Тот что я запостил у меня работает на ура (и выдайёт то же что и твой пост.
А вообще конечно ты прав на все 100% что там вообще ненужна никакая ${}.
Добавлено через 3 минуты:
Да и вообще имхо удобнее, правильнее и бысрее (по выполнению) общаться к переменным имя которой в строке через $_GLOBALS[$myvar] а не ${$myvar}. Заодно и путаницы с массивами не будет (ну или по крайней мере не должно быть).