WordPress как на ладони
wordpress jino

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

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

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

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

1
Danya50 2.1 года назад
  • 1
    Kama4697

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

    /**
     * Склонение слова после числа. 
     * 
     * Примеры вызова:
     * num_decline( $num, 'книга,книги,книг' )
     * num_decline( $num, array('книга','книги','книг') )
     * num_decline( $num, 'книга', 'книги', 'книг' )
     * 
     * @param  число $number  - число после которого будет слово
     * @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);
    
    	return $number .' '. $titles[ ($number%100 > 4 && $number %100 < 20) ? 2 : $cases[min($number%10, 5)] ];
    }

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

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