Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Да, это тема. Массив нужно передавать в аргументах (лучше просто 3 окончания).
Ещё встречал вариант с регэкспом (вроде всего один), правда мудрёный.
Для массива лучше использовать не 1, 2, 5, а 0, 1, 2, так аккуратнее, по порядку.
А зачем там указывать, что $p == 11 ?
Достаточно того, что $p между 10 и 15.
function counting($n,$words=array('','','')){//one,few,lot
$x = ($xx = $n%100)%10;
return $n.' '.$words[($xx>10 AND $xx<15 OR !$x OR $x>4 AND $x<10)?2:($x == 1?0:1)];
}
for($i=900;$i<1130;$i++)
echo counting($i,array('Кирпич','Кирпича','Кирпичей')).'<br>';
Это конечно плохой код, но это лучше, чем вообще без такой функции.
Гораздо хуже когда язык вообще не хотят использовать по-русски. Зашёл недавно на Аллоды Онлайн, посмотрел скришоты: "Получена валюта Очко умений в количестве 2" - и всё в том же духе. А вроде русская игра...
А я скажу, в чём дело. Русский язык довольно сложен для автоматической обработки и генерации, поэтому и возникают "роботизированные" тексты. В противном случае, некоего монстра "Кровавый Ворон Жатва" придётся просклонять, для множественных чисел, лиц, родов и всего прочего. И неясно как состыковывать.
Здесь, конечно, получается совсем-совсем не по-русски, но вы ж понели.
Я знаю, что английский в этом плане легче. Но мы же живём в России и говорим по-русски. ВоВ локализованный так не режет глаз своими текстами нежели изначально русская игра "Аллоды".
Прежде чем браться за всякие страшные языки не мешает выучить родной.
Только тут будет 114 кирпича )))
Надо вместо
Воткнуть
так красивее, по-моему.
Ещё встречал вариант с регэкспом (вроде всего один), правда мудрёный.
Для массива лучше использовать не 1, 2, 5, а 0, 1, 2, так аккуратнее, по порядку.
Достаточно того, что $p между 10 и 15.
111 кирпичей, 120 кирпичей, 11 кирпичей, 117 кирпичей etc.
.... OR !$x OR $x>4 AND $x<10)
Ну короче это на своё усмотрение. Просто будет некритичное пересечение условий.
Да?
Гораздо хуже когда язык вообще не хотят использовать по-русски. Зашёл недавно на Аллоды Онлайн, посмотрел скришоты: "Получена валюта Очко умений в количестве 2" - и всё в том же духе. А вроде русская игра...
Здесь, конечно, получается совсем-совсем не по-русски, но вы ж понели.
тоже вариант
Вообще, была где-то статья про локализацию забугорных игр -- тот еще геморрой.
А так -- банальная лень.
Давайте тогда еще рассмотрим алгоритм перевода цифр в текст.
Кстате...
Остаток от деления отрицательного числа -- отрицательный.
Следовательно, не забывайте использовать функцию abs($n);
Кстати самому интересно - это откуда такой глюк берётся?
-7 mod 4 = 1
Вот как надо, и равенство сохранится. Математика, 3 класс, лол.