如何用随机集替换字符串中的一组字符?

Let's say I have a basic string of characters:

$string = "abcdeffedcbaabcdef";

What I want to do is search for a, c, and f, and then replace them with any one of these characters:

$replaceChars = array("1", "2", "3");

So as I search the string, each time I hit one of the characters I want to replace, I want to randomly pick from the pool of replacement characters, and then move onto the next character to replace and randomly select again, and so on...

I should end up with something like:

$string = "2b1de32ed1b21b2de3";

I can't quite make it come together, though. I think I want to use array_rand() maybe with some kind of foreach loop, using strpos() to go through and find each instance of the characters to replace.

What's slowing me down is that it seems that there seem to be many methods for stepping through an array so that one can apply a for or while loop, I can't see how to step through a string one character at a time.

How would I do this?

$newStr = preg_replace_callback('/[acf]/', function () {
    static $replacements = array('1', '2', '3');
    return $replacements[array_rand($replacements)];
}, $str);

http://www.php.net/preg_replace_callback

This uses PHP 5.3+ anonymous functions for the callback, use more traditional methods for PHP 5.2-.