Склонение слов на PHP

Весьма популярной проблемой, с которой сталкиваются Web-программисты , это склонение слов на PHP . Например, нужно вывести, сколько минут назад была оставлено какое-нибудь сообщение. Можно написать просто число и слово "минут ". Но тогда будет написано весьма странно, например, "1 минут ", "2 минут " и так далее. Фактически, без склонения слов на PHP Вам не обойтись, если, конечно, Вы хотите писать по-русски.

Проблема новичкам покажется очень сложной, но, на самом деле, у склонения слов есть определённая закономерность. Посмотрите сами: "1 минута, 2 минуты, 5 минут, 11 минут, 19 минут, 21 минута, 22 минуты, 25 минут и так далее ". Видите закономерность? 1, 21, 31, 41 - всегда будет "минута ". Если младший разряд больше 1-го и меньше 5 , при этом само число при делении на 100 имеет остаток больше 20 (то есть, например, не число 12 и не 112 ), то будут "минуты ". В остальных случаях "минут ".

function getWord($number, $suffix) {
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $number % 100;
$suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys;
return $suffix[$suffix_key];
}
$array = array("минута", "минуты", "минут"); $n = 21;
echo "$n $word
";
$n = 11;
$word = getWord($n, $array);
echo "$n $word
";
$n = 4;
$word = getWord($n, $array);
echo "$n $word
";
?>

Запустив данный скрипт Вы увидите, что склонение слов на PHP происходит на ура. Могу лишь добавить, что помимо "минут " там может быть "день ", "час ", "человек ", "компьютер " и все другие существительные, которые склоняются в зависимости от числительного .

Здравствуй, Хабрахабр!

Сегодня я расскажу о небольшом, но очень полезном фреймворке - NameCaseLib.

Я думаю, многие сталкивались с ситуацией, когда было необходимо просклонять Фамилию, Имя и Отчество человека по падежам. Данный фреймворк поможет нам избавиться от многочисленных «велосипедов».

Установка

Для работы NameCaseLib нам понадобится PHP5 и библиотека php_mbstring, для работы с текстом в формате UTF-8.

Отлично, теперь осталось подключить сам фреймворк, для этого скачаем необходимые файлы.

NameCaseLib поддерживает два языка: русский и украинский. Файл NCL.NameCase.ru.php содержит русские правила склонения, NCL.NameCase.ua.php, соответственно, украинские. В папке NCL расположено само «ядро» фреймворка, то есть, набор основных функций.

Итак, давайте создадим файл в формате.php, и проверим работоспособность данного фреймворка.

q("Максимов Александр Васильевич"); # Выводим получившийся массив. (Примечание: возвращает простой индексируемый массив) var_dump($array); ?>

Соответственно, таким же образом, мы можем склонять и украинские ФИО, подключив украинские правила склонения.

Но, давайте все-таки разберем, какие параметры содержит в себе метод q , и как его еще можно использовать?

Данный метод имеет 3 параметра, 2 из них - можно не указывать. Первый параметр - ФИО человека, второй - падеж (Список констант приведу ниже; в случае, если не указан падеж (NULL), то метод возвращает все падежи), и третий - пол человека. (Константы, также, приведены ниже; если не указать пол (NULL), метод определит его сам)

Константы

Для указания пола используются константы:
  • NCL::$MAN – мужской пол
  • NCL::$WOMAN – женский пол

Для указания падежей русского языка:

Для указания падежей украинского языка:

  • NCL::$UaNazyvnyi – називний відмінок
  • NCL::$UaRodovyi – родовий відмінок
  • NCL::$UaDavalnyi – давальний відмінок
  • NCL::$UaZnahidnyi – знахідний відмінок
  • NCL::$UaOrudnyi – орудний відмінок
  • NCL::$UaMiszevyi – місцевий відмінок
  • NCL::$UaKlychnyi – кличний відмінок

Примечания

  1. Порядок расположения ФИО не имеет значения.
  2. Не имеет значение, в каком регистре указаны ФИО, после склонения, метод возвращает сохраненный регистр букв.

Определение части ФИО

С помощью метода getFullNameFormat, мы можем определить часть, или какие части ФИО мы используем.

getFullNameFormat("Максимов Александр Васильевич"); /* Мы получаем формат вида: S F N, где: - S - Фамилия - N - Имя - F - Отчество */ echo $fullName; ?>

Но, что же делать, если все-таки фреймворк не может правильно определить, как склонять выбранное вами ФИО?

Для этого в библиотеке предусмотрен метод qFullName, который позволяет указать Фамилию, Имя, Отчество и пол человека в определенной последовательности.

qFullName("Максимов", "Александр", "Васильевич", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>

Итоги

NameCaseLib - действительно удобный фреймворк, который включает в себя много полезных функций. На сайте имеется полная документация на русском языке.

Частенько возникает необходимость склонять имена на PHP . Согласитесь, что фраза "Добавить в друзья Илья " звучит намного хуже, чем "Добавить в друзья Илью ". Поэтому склонение имён по падежам в PHP требуется достаточно часто, и в этой статье я расскажу, как это можно реализовать у себя на сайте.

Сразу скажу, что идеального варианта, увы, нет. Первый вариант весьма очевидный: найти базу имён, которые будут во всех падежах, и добавить к себе эту таблицу. Затем по имени в именительном падеже искать соответствующий падеж по базе. Минусы тут очевидны: огромная база, всех имён не охватите, лишняя нагрузка на сервер .

Второй вариант - написать свой класс склонений имён на PHP , либо воспользоваться уже готовым. Поскольку правила в русском языке достаточно сложные, плюс есть масса исключений, поэтому и библиотека потребуется очень большая, да и даже она далеко не 100% спасение. Наиболее популярная из всех библиотек, занимающихся склонением имён на PHP , является NameCaseLib .

Скачав эту библиотеку и поместив на свой сайт, её можно использовать вот так:

Require_once "NCL.NameCase.ru.php"; // Подключаем русскую библиотеку
$case = new NCLNameCaseRu(); // Создаём объект класса NCLNameCaseRu
$array = $case->q("Русаков Михаил Юрьевич"); // Получаем массив из 6-ти элементов соответствующих 6-ти падежам, в которых окажется входная строка
print_r($array); // Выводим массив
?>

Как видите, использовать библиотеку очень просто. С другой стороны, мой главный совет будет следующий: по-возможности вообще избегайте необходимости склонять слова . Всё равно будут иногда вводить люди то, что склоняться никак не может, и попытки склонения будут выглядеть нелепо. Ведь необязательно писать "Добавить в друзья Илью ", можно же ведь написано просто "Добавить в друзья " на странице Ильи.

Сегодня тема падежи в php. Как вообще php склонение по падежам использовать и есть ли готовые решения!

Вчера искал такое готовое решение!

Можно, конечно, написать собственный скрипт склонения по падежам в php , но надо было срочно! Мне пришлось потратить довольно много времени, чтобы найти реальное решение и вполне вменяемое!

Namecaselib скрипт склонения по падежам использование.

Далее берем код и вставляем туда, куда вам надо. Вывод происходит в print_r($array) всех падежей вашего слова $name и кстати, там можно использовать для склонения и фамилию и отчество, нужно написать в переменной $name то, что вы хотите просклонять.

$name = "Ваше имя";

require_once ("путь _до_/NCLNameCaseRu.php"); // Подключаем русскую библиотеку

$case = new NCLNameCaseRu(); // Создаём объект класса NCLNameCaseRu

$array = $case->q($name); // Получаем массив из 6-ти элементов соответствующих 6-ти падежам, в которых окажется входная строка

print_r($array); // Выводим массив

Ну и кого будем склонять!? Конечно же меня любимого…

Родительный падеж в PHP как сделать!

Берем выше упомянутый код и нам нужно вывести одну из ячеек массива $array, если первая, нулевая ячейка это именительный падеж, то вторая по счету ячейка с номером это и будет наш родительный падеж слова.

print_r($array);

Дательный падеж в PHP как сделать!

Поступаем аналогично, как и с родительным, только нам нужно взять следующую ячейку по счету 3, по номеру 2.

print_r($array);

Пример: Аминеву Марату Римовичу

Винительный падеж в PHP как сделать!

Для того, чтобы использовать винительный падеж в php. Надо использовать тот же скрипт, что и ранее, только изменить номер ячейки массива.

print_r($array);

Пример: Аминева Марата Римовича

Творительный падеж в PHP как сделать!

Также продолжаем использовать нашу библиотеку и с творительным падежом в php, нам нужно только изменить число, которое отвечает за отображение имени в творительном падеже это цифра 4.

print_r($array);

Пример: Аминевым Маратом Римовичем

Предложный падеж в PHP как сделать!

Последний по счету, но не значимости предложный падеж в php, можно сделать абсолютно также, как и предыдущие падежи, только изменим цифру.

print_r($array);

Пример: Аминеве Марате Римовиче

Понравилась статья!? Не стесняйся – поделись ссылкой!

Почему стоит подписаться на наши новости!?

Расскажу историю, вчера искал ответ на один из вопросов (конечно, я могу и сам написать, но чаще всего, вначале, ищу в интернете, может есть готовое решение…) и было множество вариантов, которые были описаны, но ни одного, с примерами! И мало того, что они предлагают решения, которые непонятно как реализовывать, особенно новичкам, у которых больше вопросов, чем ответов. Так они еще и не работают!

У нас же, на сайте – только рабочие проверенные скрипты! Полностью с описанием и с примерами! И реализовать может человек с нулевыми знаниями!