WordPress как на ладони
WordPress темы и плагины за 250 рублей wordpress jino

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

Мне нужна функция которая бы склоняла слова, которые идут после числа. Например: 1 комментарий и 2 комментария.

Желательно самый простой и универсальный вариант склонение слов после числительного.

П.С. В сети много примеров таких функций, мне интересно а какую используешь ты (Тимур).

1
Danya
47
2.5 года назад
  • 1
    Kama5346

    Немного дополненный вариант блуждающей по сети функции.

    /**
     * Склонение слова после числа.
     *
     * Примеры вызова:
     * num_decline( $num, 'книга,книги,книг' )
     * num_decline( $num, array('книга','книги','книг') )
     * num_decline( $num, 'книга', 'книги', 'книг' )
     *
     * @ver: 1.0
     *
     * @param  число/строрка $number  - число после которого будет слово. Можно указать число в HTML тегах.
     * @param  строка/массив $titles - варианты склонения или первое слово для кратного 1
     * @param  строка [$param2 = ''] - второе слово, если не указано в параметре $titles
     * @param  строка [$param3 = ''] - третье слово, если не указано в параметре $titles
     * @return строку - 1 книга, 2 книги, 10 книг
     */
    function num_decline( $number, $titles, $param2 = '', $param3 = '' ){
    
    	if( is_string($titles) )
    		$titles = preg_split('~,\s*~', $titles );
    
    	if( count($titles) < 3 )
    		$titles = array( func_get_arg(1), func_get_arg(2), func_get_arg(3) );
    
    	$cases = array (2, 0, 1, 1, 1, 2);
    
    	$intnum = (int) strip_tags( $number );
    
    	return $number .' '. $titles[ ($intnum % 100 > 4 && $intnum % 100 < 20) ? 2 : $cases[min($intnum % 10, 5)] ];
    }

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

    echo num_decline( 4, 'книга, книги, книг' ); // > 4 книги
    
    echo num_decline( 21, 'книга', 'книги', 'книг' ); // > 21 книга
    
    echo num_decline( 5, array('книга','книги','книг') ); // > 5 книг
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация