<?php
// Staring straight up into the sky ... oh my my
error_reporting(-1);
mb_internal_encoding('utf-8');
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($number, $word1, $word2, $word3) {
if ($number % 100 >= 10 && $number % 100 <= 19) {
return $word3;
} elseif ($number % 10 >= 2 && $number % 10 <= 4) {
return $word2;
} elseif ($number % 10 == 1) {
return $word1;
} else {
return $word3;
}
}
/*
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
если мы считаем число для мужского рода (один рубль),
и 1 — для женского (одна тысяча)
*/
function smallNumberToText($number, $isFemale) {
$spelling = array(
0 => 'ноль', 10 => 'десять', 100 => 'сто',
1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
9 => 'девять', 19 => 'девятнадцать'
);
$femaleSpelling = array(
1 => 'одна', 2 => 'две'
);
$text = "";
if ($number > 100) {
$reviewNumber = floor($number / 100) * 100;
$text = $text." ".$spelling[$reviewNumber];
$number %= 100;
}
if ($number >= 10 && $number <= 19) {
return $text." ".$spelling[$number];
} elseif ($number > 10) {
$reviewNumber = floor($number / 10) * 10;
$text = $text." ".$spelling[$reviewNumber];
$number %= 10;
}
if ($isFemale == 1 && $number == 1) {
$text = $text." ".$femaleSpelling[1];
} elseif ($isFemale == 1 && $number == 2) {
$text = $text." ".$femaleSpelling[2];
} elseif ($number > 0) {
$text = $text." ".$spelling[$number];
}
return $text;
}
function numberToText($number) {
$baseNumber = $number;
$text = "";
if ($number == 0) {
return "ноль (0) рублей";
exit;
}
if (floor($number / 1000000) >= 1) {
$numberIterationToSplit = 3;
} elseif (floor($number / 1000) >= 1) {
$numberIterationToSplit = 2;
} else {
$numberIterationToSplit = 1;
}
for ($i = 0; $i < $numberIterationToSplit; $i++) {
if ($number % 1000 == 0 && $i != 0) {
$number = floor($number / 1000);
continue;
}
if ($i == 1) {
$isFemale = 1;
} else {
$isFemale = 0;
}
if ($i == 0){
$wordForNumber = "(".$baseNumber.") ".inclineWord($number, "рубль", "рубля", "рублей");
} elseif ($i == 1) {
$wordForNumber = inclineWord($number, "тысяча", "тысячи", "тысяч");
} else {
$wordForNumber = inclineWord($number, "миллион", "миллиона", "миллионов");
}
$text = smallNumberToText($number % 1000, $isFemale)." ".$wordForNumber.$text;
$number = floor($number / 1000);
}
return $text;
}
/* Вызовем функцию несколько раз */
$amount1 = mt_rand(1,99999999);
$text1 = numberToText($amount1);
echo "На вашем счету{$text1}\n";
$amount2 = mt_rand(1,99999999);
$text2 = numberToText($amount2);
echo "На вашем счету{$text2}\n";
$amount3 = mt_rand(1,99999999);
$text3 = numberToText($amount3);
echo "На вашем счету{$text3}\n";
$amount4 = mt_rand(1,99999999);
$text4 = numberToText($amount4);
echo "На вашем счету{$text4}\n";
preferences:
30.6 ms | 402 KiB | 5 Q