3v4l.org

run code in 300+ PHP versions simultaneously
<?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