$var = 'X X X X';
$replacements = array('A', 'B', 'C', 'D');
$var = preg_replace_callback('/X/', function() use (&$replacements) {
return array_shift($replacements);
}, $var);
Другое решение:
$var = preg_replace('/X/', 'A', $var, 1);
$var = preg_replace('/X/', 'B', $var, 1);
$var = preg_replace('/X/', 'C', $var, 1);
$var = preg_replace('/X/', 'D', $var, 1);
В этом используется параметр $limit
preg_replace (мы заменяем только одно вхождение на вызов).