strtr идеально подходит для этой задачи
<?php
$associative_chars = array(
"й"=>"y", "ц"=>"c", "у"=>"iy", "к"=>"k", "е"=>"e", "н"=>"n",
"г"=>"g", "ш"=>"sh", "щ"=>"sh", "з"=>"th", "х"=>"h", "ф"=>"ph",
"ы"=>"i", "в"=>"v", "а"=>"a", "п"=>"p", "р"=>"r", "о"=>"o",
"л"=>"l", "д"=>"d", "ж"=>"j", "э"=>"e", "я"=>"ya", "ч"=>"ch",
"с"=>"s", "м"=>"m", "и"=>"i", "т"=>"t", "б"=>"b", "ю"=>"yu"
);
$to_transcript = function($base_name, $associative) {
$base_name = mb_strtolower($base_name);
$result = strtr($base_name, $associative);
print_r($result);
};
$to_transcript("Виталий", $associative_chars);
Не забывайте обработать кирилические символы с акцентами, так как например легко можете встретить украинскую
Ї ї
или белорусскую
І і
https://en.wikipedia.org/wiki/Cyrillic_script
А А́ А̀ А̄ Ӓ Б В Г
Ґ Д Ђ Ѓ Е Е́ Ѐ Е̄
Ё Є Є́ Ж З З́ Ѕ И
І І́ Ї Ї́ И́ Ѝ Ӣ Й
Ј К Л Љ М Н Њ О
О́ О̀ Ō Ӧ П Р С С́
Т Ћ Ќ У У́ У̀ Ӯ Ў
Ӱ Ф Х Ц Ч Џ Ш Щ
Ъ Ъ̀ Ы Ы́ Ь Ѣ Э Э́
Ю Ю́ Ю̀ Я Я́ Я̀