Hallo Lena,
Leider wird das & in der Funktionsdeklaration ignoniert, die Variable also nur in Funktion geändert, nicht im "Hauptprogramm".
Ja, weil Deine Funktion selbst zwar die Variable als Referenz akzeptiert, array_walk aber nicht.
In Deinem konkreten Fall hast Du aber eine viel einfachere Möglichkeit, als eine Extra-Funktion und array_walk:
$line = str_replace (array_keys ($toreplace), array_values ($toreplace), $line);
str_replace akzeptiert (genauso wie übrigens z.B. auch preg_replace) nämlich auch Arrays (siehe PHP-Handbuch).
Für andere Fälle musst Du halt wirklich foreach nehmen oder array_walk mit Referenzparameter nachprogrammieren.
Viele Grüße,
Christian