その期待している動作はこのコードで十分なんじゃないの?
preg_replace(array("/foo/", "/bar/"), array("hoge", "piyo"), $str);

preg_replace_callbackを使いたくてしょうがない年頃かな。