array_walk($toreplace, 'test', $line);
Ich nehme mal an, dass genau hier dein Problem liegt. Innerhalb von array_walk wird vmtl. nicht $toreplace[index] an die Funktion übergeben, sondern eine extra Variable, die dann auch korrekt überschrieben wird.
Lösung: verwende foreach, durchlaufe $toreplace und führe dort deine Funktionsaufruf durch.