Вот сейчас столкнулась с тем что ФИО пользователей мне нужно в Творительном падеже выводить, а пользователей очень много и есть же фамилии которые не склоняются.
Скажите пожалуйста - существуют ли для этих целей готовые функции?
Спустя 2 минуты, 42 секунды (4.06.2010 - 11:29) Basili4 написал(а):
Спустя 7 минут, 37 секунд (4.06.2010 - 11:37) zvezda_t написал(а):
те самописные... а "специальных официальных" - нет или за деньги?
Спустя 5 часов, 49 минут, 14 секунд (4.06.2010 - 17:26) Lenarfate написал(а):
Спустя 1 час, 22 минуты, 16 секунд (4.06.2010 - 18:48) Unlikely написал(а):
php
$days = "число дней";
$day = array('Дней', 'День', 'Дня');
$index = $days % 100;
if($index >=11 && $index <= 14) {
$index = 0;
}
else {
$index = ($index %= 10) < 5 ? ($index > 2 ? 2 : $index): 0;
}
echo "$days {$day[$index]}";
Спустя 9 минут, 41 секунда (4.06.2010 - 18:58) glock18 написал(а):
осталось еще для трехсот тысяч слов по такому же куску, ага
Спустя 33 минуты, 13 секунд (4.06.2010 - 19:31) twin написал(а):
Каг бэ не больше, с учетом экзотических фамилий. (Череззаборпятиметровыйвысоконогузадерищенко)
Спустя 18 минут, 52 секунды (4.06.2010 - 19:50) Unlikely написал(а):
Цитата (glock18 @ 4.06.2010 - 15:58) |
осталось еще для трехсот тысяч слов по такому же куску, ага |
Есть более удобный и компактный вариант?
"Слова" тут вобще не при чём. Менять нужно окончание. Падежей не много, Соответственно и окончаний тоже.
Спустя 2 часа, 15 минут, 9 секунд (4.06.2010 - 22:05) twin написал(а):
Это не то, что нужно. Нужно автоматически.
А если такой вариант, то удобнее так:
сразу при вызове все понятно и видно.
А если такой вариант, то удобнее так:
function endingsForm($n, $form1, $form2, $form5)
{
$n = abs($n) % 100;
$n1 = $n % 10;
if ($n > 10 && $n < 20)
return $form5;
if ($n1 > 1 && $n1 < 5)
return $form2;
if ($n1 == 1)
return $form1;
return $form5;
}
echo 1, endingsForm(1, 'день', 'дня', 'дней'), '<br>';
echo 2, endingsForm(2, 'скрипт', 'скрипта', 'скриптов'), '<br>';
echo 10, endingsForm(10, 'хомяк', 'хомяка', 'хомяков');
сразу при вызове все понятно и видно.
Спустя 3 часа, 41 минута, 16 секунд (5.06.2010 - 01:46) demkin написал(а):
по моему не возможно для ФИО написать такое , так как в русском языке довольно часто встречаются несклоняемые фамилии
Спустя 6 часов, 11 минут, 43 секунды (5.06.2010 - 07:58) Игорь_Vasinsky написал(а):
demkin - полностью согласен... это либо из области о создании искусс. интелекта.. либо все буквы на клаве сотрутся...
Дествительно.. оч разные фамилии..просто запаришься писать правила склонения по окончанию..
Добустим есть Петров и Васечкин..также есть и Гульдинайде и Шиль....
Проще хранить аналоги фамилий и имён на английском.. буржуйский язык не знаком с падежами.
Дествительно.. оч разные фамилии..просто запаришься писать правила склонения по окончанию..
Добустим есть Петров и Васечкин..также есть и Гульдинайде и Шиль....
Проще хранить аналоги фамилий и имён на английском.. буржуйский язык не знаком с падежами.
Спустя 7 часов, 43 минуты, 11 секунд (5.06.2010 - 15:41) Ice написал(а):
да не склоняются и пёс с ними, оставь в покое
<?php
if($_SERVER['REQUEST_METHOD'] == 'GET'){
/*
** (!) Пример без защиты
*/
if(preg_match('/(?:ов|ев|ын|ин)а?$/i', $_GET['sname'])){
if(! strrpos($_GET['sname'], 'а'))
print $_GET['sname'].'<em>ым</em>';
else
print substr($_GET['sname'], 0, -1).'<em>ой</em>';
} else {
print $_GET['sname'];
}
}
Спустя 1 день, 22 часа, 19 минут, 28 секунд (7.06.2010 - 14:01) zvezda_t написал(а):
Благодарю!
Спустя 1 день, 21 час, 59 минут, 55 секунд (9.06.2010 - 12:01) SergeyZuzic написал(а):
Ещё вариантик с числами
If ($age % 10 > 4 And $age % 10 <= 9 Or $age % 10 == 0) $strage="дней";
If ($age % 10 == 1) $strage="день";
If ($age % 10 > 1 And $age % 10 <= 4) $strage="дня";
If ($age >= 11 && $age <= 20 && $age % 10 >= 1 && $age % 10 <= 9) $strage="дней";
Спустя 8 часов, 43 минуты, 25 секунд (9.06.2010 - 20:44) zvezda_t написал(а):
SergeyZuzic
спасибо что поделился
спасибо что поделился
Спустя 17 часов, 57 минут, 37 секунд (10.06.2010 - 14:42) Семён написал(а):
Спустя 3 дня, 2 часа, 16 минут, 46 секунд (13.06.2010 - 16:58) zvezda_t написал(а):
Семён спасибо)
вот так вот программистам не то что без математики - без русского - никуда!
вот так вот программистам не то что без математики - без русского - никуда!
Спустя 3 месяца, 2 дня, 21 час, 35 секунд (16.09.2010 - 13:59) zvezda_t написал(а):
Ice
мне теперь такая же функция в родительном падеже нужна
мне теперь такая же функция в родительном падеже нужна
Спустя 7 минут, 52 секунды (16.09.2010 - 14:07) Ice написал(а):
ночью постараюсь наваять, если не опередят, щас убегаю
Спустя 9 месяцев, 5 дней, 19 часов, 38 минут, 14 секунд (22.06.2011 - 09:45) zvezda_t написал(а):
Всем привет!
Может уже кто-нибудь сталкивался с проблемой склонения ФИО и находил решение?
Посоветуйте где можно скачать функции?
Может уже кто-нибудь сталкивался с проблемой склонения ФИО и находил решение?
Посоветуйте где можно скачать функции?
Спустя 3 минуты, 55 секунд (22.06.2011 - 09:49) sharki написал(а):
Спустя 2 минуты, 27 секунд (22.06.2011 - 09:52) Renden написал(а):
zvezda_t
В какой падеж тебе нужно?)
Со мной тут поделились склонением в родительный падеж(вроде, я хз уже как там они различаются) короче: Иванов Иван Иванович, получаю Иванова Ивана Ивановича..
В какой падеж тебе нужно?)
Со мной тут поделились склонением в родительный падеж(вроде, я хз уже как там они различаются) короче: Иванов Иван Иванович, получаю Иванова Ивана Ивановича..
Спустя 9 минут, 40 секунд (22.06.2011 - 10:01) zvezda_t написал(а):
Renden
мне нужно в дательный и творительный) но родительный тоже не помешает
я нашла только в дательный, работает, но основательно еще не проверяла:
дательный падеж ФИО
мне нужно в дательный и творительный) но родительный тоже не помешает
я нашла только в дательный, работает, но основательно еще не проверяла:
дательный падеж ФИО
Спустя 7 минут, 50 секунд (22.06.2011 - 10:09) Renden написал(а):
zvezda_t
дежи, он с того-же сайта, только я его подправил чутка, у меня он работал не так как надо, ща вроде норм(а может и хуже стало :) ), вообщем проверяй :)
дежи, он с того-же сайта, только я его подправил чутка, у меня он работал не так как надо, ща вроде норм(а может и хуже стало :) ), вообщем проверяй :)
Свернутый текст
function Genitive($FirstName, $SecondName, $Patronymic)
{
$FirstName = trim($FirstName);
$SecondName = trim($SecondName);
$Patronymic = trim($Patronymic);
if (!empty($FirstName) && !empty($SecondName) && !empty($Patronymic))
{
# Получаем пол человека:
if (substr($Patronymic, -2) == 'ч')
{
# Склонение фамилии мужчины:
switch (substr($FirstName, -2))
{
case 'ха':
$FirstName = substr($FirstName, 0, -2).'ха';
break;
default:
switch (substr($FirstName, -2))
{
case 'е': case 'о': case 'и': case 'я': case 'а':
break;
case 'й':
$FirstName = substr($FirstName, 0, -2).'ого';
break;
case 'ь':
$FirstName = substr($FirstName, 0, -2).'а';
break;
default:
$FirstName = $FirstName.'а';
break;
}
break;
}
# Склонение мужского имени:
switch (substr($SecondName, -2))
{
case 'л':
$SecondName = substr($SecondName, 0, -2).'ла';
break;
case 'а': case 'я':
If (substr($SecondName, -2, 1) == 'и')
{
$SecondName = substr($SecondName, 0, -2).'а';
}
else
{
$SecondName = substr($SecondName, 0, -2).'и';
}
break;
case 'й': case 'ь':
$SecondName = substr($SecondName, 0, -2).'я';
break;
default:
$SecondName = $SecondName.'а';
break;
}
# Склонение отчества
$Patronymic = $Patronymic.'а';
}
else
{
# Склоенение женской фамилии
switch (substr($FirstName, -2))
{
case 'о': case 'и': case 'б': case 'в': case 'г':
case 'д': case 'ж': case 'з': case 'к': case 'л':
case 'м': case 'н': case 'п': case 'р': case 'с':
case 'т': case 'ф': case 'х': case 'ц': case 'ч':
case 'ш': case 'щ': case 'ь':
break;
case 'я':
$FirstName = substr($FirstName, 0, -2).'ой';
default:
$FirstName = substr($FirstName, 0, -2).'ой';
break;
}
# Склонение женского имени:
switch (substr($SecondName, -2))
{
case 'а':
If (substr($SecondName, -2, 2) == 'и' or substr($SecondName, -2, 2) == 'г' ||
substr($SecondName, -4, 2) == 'г' || substr($SecondName, -4, 2) == 'к' || substr($SecondName, -4, 2) == 'х'
)
{
$SecondName = substr($SecondName, 0, -2).'и';
}
else
{
$SecondName = substr($SecondName, 0, -2).'ы';
}
break;
case 'я':
$SecondName = substr($SecondName, 0, -2).'и';
break;
case 'ь':
$SecondName = substr($SecondName, 0, -2).'и';
break;
}
# Склонение женского отчества
$Patronymic = substr($Patronymic, 0, -2).'ы';
}
return"$FirstName $SecondName $Patronymic";
}
}
Спустя 5 минут, 7 секунд (22.06.2011 - 10:14) sharki написал(а):
zvezda_t
Я же скинул, поддерживаемые падежи
Я же скинул, поддерживаемые падежи
Встроенные константы
NCLNameCaseRu::$IMENITLN - именительный падеж
NCLNameCaseRu::$RODITLN - родительные падеж
NCLNameCaseRu::$DATELN - дательные падеж
NCLNameCaseRu::$VINITELN - винительный падеж
NCLNameCaseRu::$TVORITELN - творительный падеж
NCLNameCaseRu::$PREDLOGN - предложный падеж
Спустя 52 минуты, 14 секунд (22.06.2011 - 11:06) zvezda_t написал(а):
sharki, да я скачала, буду разбираться)
Огромное спасибо!
Огромное спасибо!
Спустя 39 минут, 22 секунды (22.06.2011 - 11:46) Эли4ка написал(а):
zvezda_t
я раньше на этом форуме писала полный яваскрипт(ну кроме несклоняемых фамилий)код..но его кажется в мануал зашили,т.к. я его найти не могу..
я раньше на этом форуме писала полный яваскрипт(ну кроме несклоняемых фамилий)код..но его кажется в мануал зашили,т.к. я его найти не могу..
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)