|
SQL Error: SELECT AuthorInfo, idUser, sIP, sUrl, sStatus FROM cms_sessions WHERE (sSeconds > 49082441)
Считаем баксы на PHP!
Как на PHP посчитать баксы, рубли, евро, голоса или даже попугаев? А что значит посчитать? Это значит культурно и грамотно написать текстом: 1 бакс, 2 рубля или 5 попугаев. Ведь для каждого количества, в русском языке своё окончание или даже слово.
Только недавно я сделал функцию, которая правильно возвращала возраст, например, 1 год, 2 года или 10 лет. Теперь, опять для проекта Исполни Мечту, мне понадобилось написать количество голосов, при голосовании. Причем количество может быть любым. Вот я и решил немного усовершенствовать мою предыдущую функцию, которая возвращает возраст словом, чтобы она считала не только возраст, но и баксы, рубли, голоса или даже попугаев.
Прежде чем начать описание функции, хотелось бы ее продемонстрировать. Так как в статье это не интересно, то приведу ссылку на PHP файл, где мы посчитаем баксы, «пацанов», рубли и еще много чего.
Я не буду подробно описывать алгоритм работы функции, так как кому это надо он и сам напишет аналогичную функцию. А кто будет ей пользоваться, тому всё равно как она работает, главное знать как ей пользоваться. Поэтому я лучше опишу все входные параметры и результат.
Я вывел небольшую закономерность как образуются окончания у слов, когда их перечисляют. Таких окончаний всего три. Т.е. от слова можно отделить некоторую часть (будем называть ее базой), которая не изменяется для всех трёх вариантов и три окончания. Хочу отметить что некоторые короткие слова меняются полностью, например возраст: 1 год, 2 года а 5 лет. Пользуясь моими терминами, у таких слов нет базы а есть три окончания. Таким образом все слова можно подогнать под мой шаблон: БАЗА и ТРИ ОКОНЧАНИЯ. Немного повторюсь, для некоторых слов база пустая и есть только три окончания – т.е. три слова.
Исходя из моих правил опишу входные параметры функции: • $Counter – Количество того что мы считаем • $txtBase – База слова (может быть пустой) • $txt1 – Окончание или слово для того что мы считаем, в количестве одной штуки. • $txt2 - Окончание или слово для того что мы считаем, в количестве двух штук. • $txt5 - Окончание или слово для того что мы считаем, в количестве пяти штук. • $ShowNum – Возвращать количество или нет (true или false)
Примеры и исходный код можно посмотреть тут: http://www.ispolnimechtu.ru/promoway/text_counter.php Функция:
function BuildCountText($Counter, $txtBase = "", $txt1 = "", $txt2 = "", $txt5 = "", $ShowNum = true) { if(($Counter<=14) && ($Counter>=5)) $str = $txt5; else { $num = $Counter - (floor($Counter/10)*10); if($num == 1) { $str = $txt1; } elseif($num == 0) { $str = $txt5; } elseif(($num>=2) && ($num<=4)) { $str = $txt2; } elseif(($num>=5) && ($num<=9)) { $str = $txt5; } } if($ShowNum) return $Counter . " " . $txtBase . $str ; else return $txtBase . $str ; }
Я попытался достаточно подробно описать как использовать мою функцию, но на всякий случай приведу несколько примеров вызова, для конкретных случаев, что бы было понятно что такое база и что такое окончание:
Считаем возраст пользователей: BuildCountText($i, "", "Год", "Года", "Лет", true) Считаем «пацанов»: BuildCountText($i, "Пацан", "", "а", "ов", true) Считаем попугаев: BuildCountText($i, "Попуга", "й", "я", "ев", true) Считаем рубли : BuildCountText($i, "Рубл", "ь", "я", "ей", true) Считаем копейки: BuildCountText($i, "Копе", "йка", "йки", "ек", true) Считаем баксы: BuildCountText($i, "Бакс", "", "а", "ов", true) Считаем поездки: BuildCountText($i, "Поезд", "ка", "ки", "ок", true) Считаем мобильники: BuildCountText($i, "Мобильни", "к", "ка", "ков", true) Считаем подарки: BuildCountText($i, "Подар", "ок", "ка", "ков", true) Считаем «штучки»: BuildCountText($i, "Штуч", "ка", "ки", "ек", true)
Теперь, после таких примеров, вооружившись моей функцией, вы сможете культурно и грамотно пересчитать на своём сайте все что угодно, машины, деньги, людей и попугаев.
Обычно, на многих сайтах, используют следующий способ: пишут слово и в скобочках окончание. Например, 3 голос(ов). Но тут варианта всего два, а на самом деле их три и правильно будет 3 голоса.
Желаю удачи! При перепечатке этой статьи ссылка на источник обязательна. Пример и исходный код: http://www.ispolnimechtu.ru/promoway/text_counter.php
|