$sName = "Фамилия Имя Отчество";
echo preg_replace('~^(\S++)\s++(\S)\S++\s++(\S)\S++$~u', '$1 $2.$3.', $sName);
Не совпадающие с маской данные - т.е. три слова, разделённые между собой как минимум одним пробельным символом - будут выведены без изменений.