Php склонение от количества

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

Часто у разработчиков появляется необходимость склонять слова используя различные падежи. Например склонение числа, когда вам необходимо вывести надпись указывающую на количество добавленных в корзину товаров или показать в карточке товара сколько свободной продукции осталось на складе и т.д. К счастью есть готовые решения наподобие функции ниже:

 /** * Склонение слова после числа * @param $number - число * @param $after - массив слов в различных падежах, напр. ['товар', 'товара', 'товаров'] */ function plural_form($number, $after) < $cases = array (2, 0, 1, 1, 1, 2); return $number.' '.$after[ ($number%100>4 && $number%100

Первым аргументов функция принимает целое число, вторым аргументом идёт массив существительного в именительном падеже, родительном падеже (в единственном и множественном числе). Функция вернёт строку с числом и правильно формой существительного. Пример:

 $productsCnt = 1; echo 'На складе ' . plural_form($productsCnt, ['товар', 'товара', 'товаров']); //На складе 1 товар 
 $productsCnt = 15; echo 'В корзине ' . plural_form($productsCnt, ['товар', 'товара', 'товаров']); //В корзине 15 товаров 

Использование падежей улучшает восприятие сайта пользователем. Применяйте эту функцию в своих проектах. Желаю удачи!

Не пропусти свежие посты, подпишись:

Источник

Склонение слов в зависимости от стоящих рядом с ними цифр (существительных после числительных)

Передо мной встала такая задача, когда я занимался интернет-магазином Blue Jay и мне требовалось вывести общее количество товаров в категориях . Мне очень хотелось решить поставленную задачу качественно, то есть, чтобы выводилось «1 товар», «2 товарА», «5 товарОВ», а не «1 товаров» и «2 товаров».

Читайте также:  Php send ios push

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

Да уж, тут англичанам хорошо, у них если один товар, то «product», а если не один, то «products». В русском же языке есть три формы множественного числа, да ещё и слово постоянно склоняется в зависимости от чисел, которые стоят перед ним.

Поэтому передо мной встал выбор — либо вообще избавиться от надписи с общим числом товаров, либо как-то упростить её, либо добавить функцию, которая будет склонять слова — на третьем варианте я и остановился:

/* * $num число, от которого будет зависеть форма слова * $form_for_1 первая форма слова, например Товар * $form_for_2 вторая форма слова - Товара * $form_for_5 третья форма множественного числа слова - Товаров */ function true_wordform($num, $form_for_1, $form_for_2, $form_for_5){ $num = abs($num) % 100; // берем число по модулю и сбрасываем сотни (делим на 100, а остаток присваиваем переменной $num) $num_x = $num % 10; // сбрасываем десятки и записываем в новую переменную if ($num > 10 && $num < 20) // если число принадлежит отрезку [11;19] return $form_for_5; if ($num_x > 1 && $num_x < 5) // иначе если число оканчивается на 2,3,4 return $form_for_2; if ($num_x == 1) // иначе если оканчивается на 1 return $form_for_1; return $form_for_5; }

Если вы хотите использовать эту функцию в WordPress, то можете вставить её в файл functions.php — вы можете найти его в папке с темой.

Всё довольно просто. Теперь, когда я расписал, как это работает, приведу пример:

$max_product = 5; // число, эта переменная может задаваться через какую-то другую функцию или доставаться из базы - неважно echo $max_product . ' ' . true_wordform($max_product, 'товар', 'товара', 'товаров'); // в результате получится "5 товаров"

Читайте также о том, как реализовать склонение слов на JavaScript.

Смотрите также

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Источник

Склонение слов после числительных в PHP

В интернет магазинах, CRM и других сервисах для «правильности» есть необходимость склонять существительных после чисел или как это еще называют – плюрализация, например: 1 товар, 2 товара, 5 товаров.

Реализовать такой вывод можно с помощью функции:

/** * Склонение существительных после числительных. * * @param string $value Значение * @param array $words Массив вариантов, например: array('товар', 'товара', 'товаров') * @param bool $show Включает значение $value в результирующею строку * @return string */ function num_word($value, $words, $show = true) < $num = $value % 100; if ($num >19) < $num = $num % 10; >$out = ($show) ? $value . ' ' : ''; switch ($num) < case 1: $out .= $words[0]; break; case 2: case 3: case 4: $out .= $words[1]; break; default: $out .= $words[2]; break; >return $out; >

Параметр $words – массив, в котором:

  • первый элемент задает текст для единичных значений,
  • второй для значений с 2-х до 4-х,
  • третий для всех остальных.
echo num_word(1, array('рубль', 'рубля', 'рублей')) . '
'; echo num_word(3, array('рубль', 'рубля', 'рублей')) . '
'; echo num_word(9, array('рубль', 'рубля', 'рублей')) . '
';

Единицы измерения товаров

echo num_word($value, array('товар', 'товара', 'товаров'); echo num_word($value, array('штука', 'штуки', 'штук'); echo num_word($value, array('упаковка', 'упаковки', 'упаковок'); echo num_word($value, array('коробка', 'коробки', 'коробок'); echo num_word($value, array('пачка', 'пачки', 'пачек'); echo num_word($value, array('ящик', 'ящика', 'ящиков'); echo num_word($value, array('комплект', 'комплекта', 'комплектов'); echo num_word($value, array('экземпляр', 'экземпляра', 'экземпляров'); echo num_word($value, array('рулон', 'рулона', 'рулонов'); echo num_word($value, array('лист', 'листа', 'листов'); echo num_word($value, array('погонный метр', 'погонных метра', 'погонных метров'));

Экономические единицы

echo num_word($value, array('процент', 'процента', 'процентов')); echo num_word($value, array('рубль', 'рубля', 'рублей')); echo num_word($value, array('доллар', 'доллара', 'долларов')); echo num_word($value, array('условная единица', 'условные единицы', 'условных единиц'));

Масса

echo num_word($value, array('тонна', 'тонны', 'тонн')); echo num_word($value, array('центнер', 'центнера', 'центнеров')); echo num_word($value, array('килограмм', 'килограмма', 'килограммов')); echo num_word($value, array('грамм', 'грамма', 'граммов')); echo num_word($value, array('миллиграмм', 'миллиграмма', 'миллиграммов'));

Длина

echo num_word($value, array('километр', 'километра', 'километров')); echo num_word($value, array('метр', 'метра', 'метров')); echo num_word($value, array('сантиметр', 'сантиметра', 'сантиметров')); echo num_word($value, array('миллиметр', 'миллиметра', 'миллиметров'));

Объем

echo num_word($value, array('куб', 'куба', 'кубов')); echo num_word($value, array('литр', 'литра', 'литров')); echo num_word($value, array('миллилитр', 'миллилитра', 'миллилитров'));

Площадь

echo num_word($value, array('гектар', 'гектара', 'гектаров')); echo num_word($value, array('акр', 'акра', 'акров')); echo num_word($value, array('сотка', 'сотки', 'соток')); echo num_word($value, array('квадратный метр', 'квадратных метра', 'квадратных метров'));

Дата и время

echo num_word($value, array('год', 'года', 'лет')); echo num_word($value, array('месяц', 'месяца', 'месяцев')); echo num_word($value, array('день', 'дня', 'дней')); echo num_word($value, array('сутки', 'суток', 'суток')); echo num_word($value, array('час', 'часа', 'часов')); echo num_word($value, array('минута', 'минуты', 'минут')); echo num_word($value, array('секунда', 'секунды', 'секунд')); echo num_word($value, array('микросекунда', 'микросекунды', 'микросекунд')); echo num_word($value, array('миллисекунда', 'миллисекунды', 'миллисекунд'));

Технические единицы

echo num_word($value, array('оборот в минуту', 'оборотов в минуту', 'оборотов в минуту')); echo num_word($value, array('километр в час', 'километра в час', 'километров в час')); echo num_word($value, array('лошадиная сила', 'лошадиные силы', 'лошадиных сил')); echo num_word($value, array('градус', 'градуса', 'градусов')); echo num_word($value, array('калория', 'калории', 'калорий'));

Тексты

echo num_word($value, array('параграф', 'параграфа', 'параграфов')); echo num_word($value, array('предложение', 'предложения', 'предложений')); echo num_word($value, array('слово', 'слова', 'слов')); echo num_word($value, array('знак', 'знака', 'знаков')); echo num_word($value, array('символ', 'символа', 'символов'));

Источник

Функция склонения слов после чисел (PHP, JS)

Не редко возникает необходимость вывода числа с подписью и в этом случае в русском языке окончание подписи будет зависеть от того какое число указано. Например, вывод количества дней: 1 день , 2 дня , 5 дней . Как видно форма слова меняется в зависимости от числа.

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

Ниже я постарался написать универсальный вариант склонение слов после числительного.

/** * Word declension after a number. * * // Examples of invocation: * num_decline( $num, ‘книга,книги,книг’ ) * num_decline( $num, ‘book,books’ ) * num_decline( $num, [ ‘книга’,’книги’,’книг’ ] ) * num_decline( $num, [ ‘book’,’books’ ] ) * * @param int|string $number The number that is followed by the word. You can use HTML tags. * @param string|array $titles Variants of words for numbers. * @param bool $show_number Set to `false`, when you don’t want to output the number itself. * * @return string For example: 1 book, 2 books, 10 books. * * @version 3.1 */ function num_decline( $number, $titles, $show_number = true ) < if( is_string( $titles ) )< $titles = preg_split( '/, */', $titles ); >// когда указано 2 элемента if( empty( $titles[2] ) ) < $titles[2] = $titles[1]; >$cases = [ 2, 0, 1, 1, 1, 2 ]; $intnum = abs( (int) strip_tags( $number ) ); $title_index = ( $intnum % 100 > 4 && $intnum % 100

#1 Пример использования

Удобно, что параметры можно передавать по-разному. Чтобы каждый раз не вспоминать как именно нужно это делать, например:

echo num_decline( 4, 'книга, книги, книг' ); // 4 книги echo num_decline( 5, ['книга','книги','книг'] ); // 5 книг echo num_decline( 4, 'книга, книги, книг', 0 ); // книги

#1 Выведем склоняемый текст до и после числа

$num = 23; echo sprintf( "%s $num %s", num_decline( $num, 'Опубликован,Опубликовано', 0 ), num_decline( $num, 'комментарий,комментария,комментариев', 0 ) ); // Опубликовано 23 комментария

Функция склонения слов после чисел (JS)

Та же самая функция только для JS.

/** * Склонение слова после числа. * * // Примеры вызова: * num_decline( num, 'книга,книги,книг' ) * num_decline( num, 'book,books' ) * num_decline( num, [ 'книга','книги','книг' ] ) * num_decline( num, [ 'book','books' ] ) * * @param number Число после которого будет слово. Можно указать число в HTML тегах. * @param titles Варианты склонения или первое слово для кратного 1. * @param show_number Указываем тут 00, когда не нужно выводить само число. * * @return string Например: 1 книга, 2 книги, 10 книг. * * @version 3.1 */ function num_decline( number, titles, show_number = true ) < if( typeof titles === 'string' )< titles = titles.split( /, */ ) >// когда указано 2 элемента if( typeof titles[2] === 'undefined' ) < titles[2] = titles[1] >const cases = [ 2, 0, 1, 1, 1, 2 ] // strip_tags const intnum = Math.abs( parseInt( `$`.replace(/]+>/gi, '') ) ) let title_index = ( intnum % 100 > 4 && intnum % 100 < 20 ) ? 2 : cases[ Math.min( intnum % 10, 5 ) ]; return ( show_number ? `$` : '' ) + titles[ title_index ]; >
function numDecline( n, titles ) < return titles[ 1 === n % 10 && 11 !== n % 100 ? 0 : 2 = n % 10 && ( 10 > n % 100 || 20 // использование numDecline( 1, ['книга', 'книги', 'книг'] )

Источник

Склонение слов в зависимости от числа в PHP

Привет, дорогой друг. Сейчас мы реализуем автоматическое склонение слов при помощи PHP и напишем универсальную функцию, которую можно будет переносить из проекта в проект и при этом все будет работать более, чем корректно. Склонение слов в зависимости от числа требуется очень часто, если сайт чуть больше среднего, где есть различные категории и множество других страниц, относящихся к этим категориям. К примеру есть специалисты и у них есть стаж работы. У каждого он разный. И в зависимости ото того, сколько лет, нужно выводить (1) год, (22) года или (7) лет. Каждый раз вручную прописывать не очень практично, гораздо лучше сделать так, чтобы менялось все автоматически, чем мы с вами и займемся.

Телеграм-канал serblog.ru

Функцию склонения слов в PHP можно назвать как угодно, но лучше, и по правилам именования функций, чтобы ее название говорило вам, что она делает, поэтому мы назовем ее declination , что в переводе на русский означает — склонение. По традиции я пишу функцию, потом объясняю что и как в ней работает.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
function declination( $num, $words ) { if ( $num > 19 ) { $num = $num % 10; } switch ( $num ) { case 1: { return ( $words[0] ); } case 2: case 3: case 4: { return ( $words[1] ); } default: { return ( $words[2] ); } } }
echo declination(50, ['год', 'года', 'лет']);

echo declination(50, [‘год’, ‘года’, ‘лет’]);

В параметрах функции указываем первым аргументом число, а вторым массив слов. С 3 по 5 строку проверяем является ли число больше 19, то получаем остаток ото деления на 10. К примеру если 21 / 10, то остаток получаем 1. и в switch — case проверяем, если остаток 1, то возвращаем $words[0] — (год), если 2, 3, или 4 — $words[1] (года), если другое, то $words[2] (лет).

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

echo declination(50, ['рубль', 'рубля', 'рублей']);

echo declination(50, [‘рубль’, ‘рубля’, ‘рублей’]);

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

Источник

Оцените статью