
Итак, сложного тут, особо, нет ничего. Последний раз мне потребовалось сделать правильные окончания у слова "статьи". Функция PHP в том виде какая она тут есть, появилась не сразу. Первая её версия была более чем из 30 строк кода и использовала регулярные выражения (прошу прощения, что у вас заныли зубы). Вторая версия была с преобразованием строк в массивы и циклами foreach, о да я знаю толк в извращениях! Я строки пользовал как массивы символов, потом загонял их в массивы и прогонял через циклы, я прыгал с бубном и дико хохотал, пока не насторожились соседи, пришлось прекратить прогонять через циклы... Было еще пару вариаций, и вот последняя, а там черт его знает как будет, может еще чего появится...
function($number){ if($number == 0) return '0 статей'; $titles = array(/*1*/'статья', /*2*/'статьи', /*5*/'статей'); $cases = array (2, 0, 1, 1, 1, 2); return $number.' '.$titles[($number % 100 > 4 && $number % 100 < 20) ? 2 : $cases[min($number % 10, 5)]]; }
Данную функцию вы сможете адаптировать под любое слово, которое вам будет необходимо или вообще сделать универсальной. Ну или сделать её сниппитеом для MODX:
if($number == 0) return '0 статей'; $titles = array(/*1*/'статья', /*2*/'статьи', /*5*/'статей'); $cases = array (2, 0, 1, 1, 1, 2); return $number.' '.$titles[($number % 100 > 4 && $number % 100 < 20) ? 2 : $cases[min($number % 10, 5)]];
На этом все, добра вам и успеха в ваших начинаниях!