Пупкин Вася
а на странице написания сообщения пользователю вы видите немного другое
Отправить сообщение Пупкину Васе
Для тех кто еще не смог сообразить как это выполняется, функция ниже будет полезна (надеюсь):
Собственно функция
<?
function changename($changename = 'Пупкин Василий', $gender = 1, $case = 1) {
// Разделяем данные на фамилию и имя
$partname = explode(' ', $changename);
// Если падеж не именительный, начинаем работу
if ($case > 1) {
// Получаем фамилию и имя
$sn = $partname['0'];
$n = $partname['1'];
// Получаем длину фамилии и имени ( кол-во символов )
$lsn = utf_strlen($sn);
$ln = utf_strlen($n);
// Получаем длину фамилии и имени до предпоследней буквы ( кол-во символов )
$m1sn = $lsn - 1;
$m1n = $ln - 1;
$m2n = $ln - 2;
// Выводим последние символы ( окончания ) для дальнейшего сравнения с окончаниями в массиве
$e1sn = utf_substr($sn, $m1sn, 1);
$e1n = utf_substr($n, $m1n, 1);
$e2n = utf_substr($n, $m2n, 2);
// Получаем фамилию и имя без последних символов
$n1esn = utf_substr($sn, 0, $m1sn);
$n1en = utf_substr($n, 0, $m1n);
$n2en = utf_substr($n, 0, $m2n);
// Работа с мужской фамилией и именем
if ($gender == 1) {
// Массив окончаний мужских фамилий
$mesn = array(
'1' => array( 'о', 'х')
);
// Замена окончаний фамилии в зависимости от падежа
$snlc = ($case == 2) ? 'а' : ($case == 3) ? 'у' : '';
// Замена окончаний фамилий в зависимости от падежа
if (in_array($e1sn, $mesn['1'])) {
$surname = $sn;
} else {
$surname = $sn . $snlc;
}
// Массив окочаний мужских имен
$men = array(
'1' => array( 'ва', 'ма' ),
'2' => array( 'ек'),
'3' => array('ел'),
'4' => array( 'н', 'р', 'в', 'с', 'м', 'л', 'д' ),
'5' => array( 'й', 'ь' ),
'6' => array( 'я', 'а' )
);
// Работа с заменой окончаний мужских имен в зависимости от падежа
if ($name = in_array($e2n, $men['1'])) {
$nlc = ($case == 2) ? 'ы' : ($case == 3) ? 'е' : '';
$name = $n1en . $nlc;
} elseif (in_array($e2n, $men['2'])) {
$nlc = ($case == 2) ? 'ька' : ($case == 3) ? 'ьку' : '';
$name = $n2en . $nlc;
} elseif(in_array($e2n, $men['3'])) {
$nlc = ($case == 2) ? 'ла' : ($case == 3) ? 'лу' : '';
$name = $n2en . $nlc;
} elseif(in_array($e1n, $men['4'])) {
$nlc = ($case == 2) ? 'а' : ($case == 3) ? 'у' : '';
$name = $n . $nlc;
} elseif (in_array($e1n, $men['5'])) {
$nlc = ($case == 2) ? 'я' : ($case == 3) ? 'ю' : '';
$name = $n1en . $nlc;
} elseif (in_array($e1n, $men['6'])) {
$nlc = ($case == 2) ? 'и' : ($case == 3) ? 'е' : '';
$name = $n1en . $nlc;
} else {
$name = $n;
}
// Работа с женской фамилией и именем
} elseif ($gender == 2) {
// Массив окончаний женских фамилий
$wesn = array(
'1' => array( 'о', 'х')
);
// Замена окончаний фамилий в зависимости от падежа
if (in_array($e1sn, $wesn['1'])) {
$surname = $sn;
} else {
$surname = $n1esn . 'ой';
}
// Массив окончаний женских имен
$wen = array(
'1' => array( 'ша', 'тя', 'ня', 'ка', 'ля' ),
'2' => array( 'ра', 'та', 'да', 'ма', 'на' )
);
// Работа с заменой окончаний женских имен в зависимости от падежа
if ($name = in_array($e2n, $wen['1'])) {
$wlc = ($case == 2) ? 'и' : ($case == 3) ? 'е' : '';
$name = $n1en . $wlc;
} elseif (in_array($e2n, $wen['2'])) {
$wlc = ($case == 2) ? 'ы' : ($case == 3) ? 'е' : '';
$name = $n1en . $wlc;
} else {
$name = $n;
}
// Если каким то образом пол не определен то ничего не меняем
} else {
$surname = $sn;
$name = $n;
}
// Соединяем измененные фамилию и имя
$fullname = $surname . ' ' . $name;
// Если падеж именительный то ничего не изменяем
} else {
$fullname = $changename;
}
//
return $fullname;
}
Параметры и их значения
Первый параметр - фамилия и имя в именительном падеже (если правило не будет соблюдено возможна некорректное склонение).
Второй - пол пользователя, где:
1 - мужской
2 - женский
Третий - падеж склонения, где:
1 - именительный (кто, что)
2 - родительный (кого, чего)
3 - дательный (кому, чему)
Вызывая функцию и ПРАВИЛЬНО указав все параметры вы получите фамилию и имя склоненные по выбранному вами падежу
Вызов и результат
<?=changename('Пупкин Вася', 1, 3)?>