Весьма популярной проблемой, с которой сталкиваются 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, и проверим работоспособность данного фреймворка.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Метод q - склоняет Фамилию, Имя и Отчество человека по правилам пола. $array = $case->q("Максимов Александр Васильевич"); # Выводим получившийся массив. (Примечание: возвращает простой индексируемый массив) var_dump($array); ?>
Соответственно, таким же образом, мы можем склонять и украинские ФИО, подключив украинские правила склонения.
Но, давайте все-таки разберем, какие параметры содержит в себе метод q , и как его еще можно использовать?
Данный метод имеет 3 параметра, 2 из них - можно не указывать. Первый параметр - ФИО человека, второй - падеж (Список констант приведу ниже; в случае, если не указан падеж (NULL), то метод возвращает все падежи), и третий - пол человека. (Константы, также, приведены ниже; если не указать пол (NULL), метод определит его сам)
Константы
Для указания пола используются константы:- NCL::$MAN – мужской пол
- NCL::$WOMAN – женский пол
Для указания падежей русского языка:
- NCL::$IMENITLN - именительный падеж
- NCL::$RODITLN - родительный падеж
- NCL::$DATELN - дательный падеж
- NCL::$VINITELN - винительный падеж
- NCL::$TVORITELN - творительный падеж
- NCL::$PREDLOGN - предложный падеж
Для указания падежей украинского языка:
- NCL::$UaNazyvnyi – називний відмінок
- NCL::$UaRodovyi – родовий відмінок
- NCL::$UaDavalnyi – давальний відмінок
- NCL::$UaZnahidnyi – знахідний відмінок
- NCL::$UaOrudnyi – орудний відмінок
- NCL::$UaMiszevyi – місцевий відмінок
- NCL::$UaKlychnyi – кличний відмінок
Примечания
- Порядок расположения ФИО не имеет значения.
- Не имеет значение, в каком регистре указаны ФИО, после склонения, метод возвращает сохраненный регистр букв.
Определение части ФИО
С помощью метода getFullNameFormat, мы можем определить часть, или какие части ФИО мы используем.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Метод getFullNameFormat - разбивает строку и возвращает формат, в котором записано имя. $fullName = $case->getFullNameFormat("Максимов Александр Васильевич"); /* Мы получаем формат вида: S F N, где: - S - Фамилия - N - Имя - F - Отчество */ echo $fullName; ?>
Но, что же делать, если все-таки фреймворк не может правильно определить, как склонять выбранное вами ФИО?
Для этого в библиотеке предусмотрен метод qFullName, который позволяет указать Фамилию, Имя, Отчество и пол человека в определенной последовательности.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Параметры метода: qFullName(Фамилия, Имя, Отчество, пол, падеж, формат); Все параметры являются необязательными, если, например, не указать пол - система сама определит его. echo $nc->qFullName("Максимов", "Александр", "Васильевич", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>
Итоги
NameCaseLib - действительно удобный фреймворк, который включает в себя много полезных функций. На сайте имеется полная документация на русском языке.Частенько возникает необходимость склонять имена на PHP . Согласитесь, что фраза "Добавить в друзья Илья " звучит намного хуже, чем "Добавить в друзья Илью ". Поэтому склонение имён по падежам в PHP требуется достаточно часто, и в этой статье я расскажу, как это можно реализовать у себя на сайте.
Сразу скажу, что идеального варианта, увы, нет. Первый вариант весьма очевидный: найти базу имён, которые будут во всех падежах, и добавить к себе эту таблицу. Затем по имени в именительном падеже искать соответствующий падеж по базе. Минусы тут очевидны: огромная база, всех имён не охватите, лишняя нагрузка на сервер .
Второй вариант - написать свой класс склонений имён на PHP , либо воспользоваться уже готовым. Поскольку правила в русском языке достаточно сложные, плюс есть масса исключений, поэтому и библиотека потребуется очень большая, да и даже она далеко не 100% спасение. Наиболее популярная из всех библиотек, занимающихся склонением имён на PHP , является NameCaseLib .
Скачав эту библиотеку и поместив на свой сайт, её можно использовать вот так:
$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);
Пример: Аминеве Марате Римовиче
Понравилась статья!? Не стесняйся – поделись ссылкой!
Почему стоит подписаться на наши новости!?
Расскажу историю, вчера искал ответ на один из вопросов (конечно, я могу и сам написать, но чаще всего, вначале, ищу в интернете, может есть готовое решение…) и было множество вариантов, которые были описаны, но ни одного, с примерами! И мало того, что они предлагают решения, которые непонятно как реализовывать, особенно новичкам, у которых больше вопросов, чем ответов. Так они еще и не работают!
У нас же, на сайте – только рабочие проверенные скрипты! Полностью с описанием и с примерами! И реализовать может человек с нулевыми знаниями!