Окончания для чисел php

seredniy / new_gist_file.php

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

/**
* Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний
* param $number Integer Число на основе которого нужно сформировать окончание
* param $endingsArray Array Массив слов или окончаний для чисел (1, 4, 5),
* например array(‘яблоко’, ‘яблока’, ‘яблок’)
* return String
*/
function getNumEnding ( $ number , $ endingArray )
$ number = $ number % 100 ;
if ( $ number >= 11 && $ number <= 19 )
$ ending = $ endingArray [ 2 ];
>
else
$ i = $ number % 10 ;
switch ( $ i )
case ( 1 ): $ ending = $ endingArray [ 0 ]; break ;
case ( 2 ):
case ( 3 ):
case ( 4 ): $ ending = $ endingArray [ 1 ]; break ;
default : $ ending = $ endingArray [ 2 ];
>
>
return $ ending ;
>
?>

Источник

Склонение слов после числительных в 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, ['книга', 'книги', 'книг'] )

Источник

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

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

Склонение слова на 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. Преподаватель в школе Нетология.

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

Источник

Читайте также:  Java enum вывести все значения
Оцените статью