@ 2017-04-04T21:04:46Z <?php
error_reporting(-1);
mb_internal_encoding('utf-8');
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
//создадим массивы в массиве, чтобы можно было искать по типу $массив[k][i] где
//k это тип слова (зависит от обрабатываемой тройки цифр), а i рассчитывается по алгоритму{
function inclineWord($number, $type) {
$type1 = array(
0 => 'миллион', 1 => 'миллиона', 2 => 'миллионов'
);
$type2 = array(
0 => 'тысяча', 1 => 'тысячи', 2 => 'тысяч'
);
$type3 = array(
0 => 'рубль.', 1 => 'рубля.', 2 => 'рублей.'
);
$union = array(
0 => $type1, 1 => $type2, 2 => $type3
);
$i = getFinalWord($number);
return ($union[$type][$i]);
}
//}
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 => 'две'
);
$words = array();
//сотни{
if ($number > 99){
$words[0] = $spelling[(floor($number/100))*100];
}
//}
//две последних цифры, у которых может быть своё общее название{
$check = $number % 100;
if ($check >= 10 && $check <= 19){
$words[1] = $spelling[$check];
//если общего названия нет, то работаем с каждой цифрой по отдельности
} else {
//десятки
if ((floor($check/10))*10 <> 0){
$words[1] = $spelling[(floor($check/10))*10];
}
//единицы
if ($check % 10 <> 0){
if($isFemale == true && ($check % 10 <= 2)){
$words[2] = $femaleSpelling[$check % 10];
}else{
$words[2] = $spelling[$check % 10];
}
}
}
//}
$text = implode(" ", $words);
return $text;
}
//разбиваем исходное число на тройки и помещаем в массив{
function spellSmallNumber($number){
$numbers = array();
$numbers[0] = floor($number / 1000000);
$numbers[1] = floor(($number % 1000000)/1000);
$numbers[2] = $number % 1000;
return ($numbers);
}
//}
function numberToText($number) {
$text = "";
//если цифра задана 0, но и считать её не нужно, пишем "ноль"{
if ($number <> 0){
$numbers = spellSmallNumber($number);
//$count будет использоваться в массиве $union для поиска словоформ, при проходе каждой тройки увеличивается
//0 - миллионы, 1 - тысячи, 2 - сотни{
$count = 0;
//}
//будем писать все слова, составляющие цифру, в один финальный массив
//$i будет служить для счетчика ключа{
$i = 0;
$finalArray = array();
//}
foreach ($numbers as $oneNumber) {
//женский род только у тысячи, т.е. у типа 1{
if ($count == 1){
$isFemale = true;
}else{
$isFemale = false;
}
//}
//если группа из 3х цифр равна 0, то нет смысла искать ей слово разрядности и вообще превращать в слово
if ($oneNumber <> 0){
$finalArray[$i] = smallNumberToText($oneNumber, $isFemale);
$i++;
//если это последняя группа (сотни), то слова разрядности искать не нужно
if ($count <> 2){
$finalArray[$i] = inclineWord($oneNumber, $count);
$i++;
}
//}
}
//}
$count++;
}
$text = implode(" ", $finalArray);
} else {
$text = "ноль";
}
//}
return $text;
}
//работа с поиском нужной словоформы. для этого определим 2 последних числа
//и если они не в промежутке от 5 до 20, то работаем с последней цифрой{
function getFinalWord($number){
if ($number >= 5 && $number <= 20){
return(2);
} elseif($number >= 21){
$number = $number%10;
return(checking($number));
} else{
return(checking($number));
}
}
//}
function checking($number){
if ($number == 1){
return(0);
}elseif($number >= 2 && $number <= 4){
return(1);
}else{
return(2);
}
}
//$amount1 = mt_rand(1,99999999);
$amount1 = 7000000;
echo "{$amount1}\n";
$text1 = numberToText($amount1);
//ищем, какую форму надо поставить у слова "рубль"{
$finalWord = inclineWord($amount1 % 100, 2);
//}
echo "На вашем счету: {$text1} {$finalWord}\n";
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.0.0 - 7.0.20 , 7.1.0 - 7.1.33 , 7.2.5 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 7000000
На вашем счету: семь миллионов рублей.
Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
7000000
На вашем счету: семь миллионов рублей.
preferences:dark mode live preview
163.4 ms | 402 KiB | 198 Q