Блог / Разработчикам / Считаем баксы на PHP!
SQL Error: SELECT AuthorInfo, idUser, sIP, sUrl, sStatus FROM cms_sessions WHERE (sSeconds > 61286829)

Считаем баксы на 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

Просмотров: 645 | Комментарии: 0 | Денис