Много беды предоставило то,что php плохо работает с многобайтными кодировками,типа UTF-8,по-этому некоторые строчки можно было б упростить (если бы вместо руссского был английский). Ну,главное работает.
Пока писал,вспоминал все имена и их возможные окончания,если что не хватает,добавите сами
function name($name)
{
mb_internal_encoding('UTF-8'); //ставим кодировку
$name = mb_strtolower(trim($name)); //строка (имя)
$c = mb_strlen($name); //считаем к-во букв
$c2 = ($c-2); //отнимаем 2 для старта отсчета
$r = mb_substr($name,$c2,$c); //вырезаем 2 последних буквы для шаблона
//далее делаем замены
$name = (mb_stristr($r,'ий')) ? str_replace($r,'ия',$name) : $name;
$name = (mb_stristr($r,'ей')) ? str_replace($r,'ея',$name) : $name;
$name = (mb_stristr($r,'др')) ? str_replace($r,'дра',$name) : $name;
$name = (mb_stristr($r,'ша')) ? str_replace($r,'ши',$name) : $name;
$name = (mb_stristr($r,'ия')) ? str_replace($r,'ии',$name) : $name;
$name = (mb_stristr($r,'на')) ? str_replace($r,'ны',$name) : $name;
$name = (mb_stristr($r,'ка')) ? str_replace($r,'ки',$name) : $name;
$name = (mb_stristr($r,'ня')) ? str_replace($r,'ни',$name) : $name;
$name = (mb_stristr($r,'ан')) ? str_replace($r,'ана',$name) : $name;
$name = (mb_stristr($r,'ля')) ? str_replace($r,'ли',$name) : $name;
$name = (mb_stristr($r,'ся')) ? str_replace($r,'си',$name) : $name;
$name = (mb_stristr($r,'са')) ? str_replace($r,'сы',$name) : $name;
$name = (mb_stristr($r,'та')) ? str_replace($r,'ты',$name) : $name;
$name = (mb_stristr($r,'ик')) ? str_replace($r,'ика',$name) : $name;
$name = (mb_stristr($r,'ор')) ? str_replace($r,'ора',$name) : $name;
$name = (mb_stristr($r,'ин')) ? str_replace($r,'ина',$name) : $name;
$name = (mb_stristr($r,'ль')) ? str_replace($r,'ля',$name) : $name;
$name = (mb_stristr($r,'ля')) ? str_replace($r,'ли',$name) : $name;
$name = (mb_stristr($r,'за')) ? str_replace($r,'зы',$name) : $name;
$name = (mb_stristr($r,'он')) ? str_replace($r,'она',$name) : $name;
$name = (mb_stristr($r,'ир')) ? str_replace($r,'ира',$name) : $name;
$name = (mb_stristr($r,'ра')) ? str_replace($r,'ры',$name) : $name;
$name = (mb_stristr($r,'га')) ? str_replace($r,'ги',$name) : $name;
$name = (mb_stristr($r,'ок')) ? str_replace($r,'ока',$name) : $name;
$name = (mb_stristr($r,'ав')) ? str_replace($r,'ава',$name) : $name;
$name = (mb_stristr($r,'ый')) ? str_replace($r,'ого',$name) : $name;
$name = (mb_stristr($r,'ер')) ? str_replace($r,'ера',$name) : $name;
$name = (mb_stristr($r,'им')) ? str_replace($r,'има',$name) : $name;
$name = (mb_stristr($r,'кс')) ? str_replace($r,'кса',$name) : $name;
$name = (mb_stristr($r,'от')) ? str_replace($r,'ота',$name) : $name;
$name = (mb_stristr($r,'ма')) ? str_replace($r,'мы',$name) : $name;
$name = (mb_stristr($r,'ев')) ? str_replace($r,'ева',$name) : $name;
$name = (mb_stristr($r,'ил')) ? str_replace($r,'ила',$name) : $name;
$name = mb_strtoupper(mb_substr($name,0,1)) . mb_substr($name,1); //делаем первую букву в Верхнем регистре
return $name; //возвращаем результат
}
echo name('Михаил'); //пример использования