Просто оставлю тут:
Киев -> в Киеве
Пермь -> в Перми
Москва -> в Москве
Питер -> в Питере
function to_prepositional($str) {
$replace = array();
$replace['2'][] = array('ия','ии');
$replace['2'][] = array('ия','ии');
$replace['2'][] = array('ий','ом');
$replace['2'][] = array('ое','ом');
$replace['2'][] = array('ая','ой');
$replace['2'][] = array('ль','ле');
$replace['1'][] = array('а','е');
$replace['1'][] = array('о','е');
$replace['1'][] = array('и','ах');
$replace['1'][] = array('ы','ах');
$replace['1'][] = array('ь','и');
foreach ($replace as $length => $replacement) {
$str_length = mb_strlen($str, 'UTF-8');
$find = mb_substr($str, $str_length - $length, $str_length, 'UTF-8');
foreach($replacement as $try) {
if ( $find == $try[0] ) {
$str = mb_substr($str, 0, $str_length - $length, 'UTF-8');
$str .= $try['1'];
return $str;
}
}
}
if ($find == 'е') {
return $str;
} else {
return $str.'е';
}
}