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, $key) { $formsOfWords = array( 0 => array("миллион", "миллиона", "миллионов"), 1 => array("тысяча", "тысячи", "тысяч"), 2 => array("рубль", "рубля", "рублей") ); $number = $number % 10; if ($number >= 11 && $number <= 14){ return $formsOfWords[$key][2]; }if ($number == 1){ return $formsOfWords[$key][0]; } elseif ($number > 1 && $number < 5) { return $formsOfWords[$key][1]; } else { return $formsOfWords[$key][2]; } } /* Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю, если мы считаем число для мужского рода (один рубль), и 1 — для женского (одна тысяча) */ function smallNumberToText($number, $isFemale) { $spelling = array( 0 => 'ноль', 1 => 'один', 2 => 'два', 3 => 'три', 4 => 'четыре', 5 => 'пять', 6 => 'шесть', 7 => 'семь', 8 => 'восемь', 9 => 'девять', 10 => 'десять', 11 => 'одиннадцать', 12 => 'двенадцать', 13 => 'тринадцать', 14 => 'четырнадцать', 15 => 'пятнадцать', 16 => 'шестнадцать', 17 => 'семнадцать', 18 => 'восемнадцать', 19 => 'девятнадцать', 20 => 'двадцать', 30 => 'тридцать', 40 => 'сорок', 50 => 'пятьдесят', 60 => 'шестьдесят', 70 => 'семьдесят', 80 => 'восемьдесят', 90 => 'девяносто', 100 => 'сто', 200 => 'двести', 300 => 'триста', 400 => 'четыреста', 500 => 'пятьсот', 600 => 'шестьсот', 700 => 'семьсот', 800 => 'восемьсот', 900 => 'девятьсот' ); $femaleSpelling = array( 1 => 'одна', 2 => 'две' ); $digitsByWord = ""; if ($number == 0){ return $spelling[0]; } if ($number >= 100){ $digits = floor($number / 100) * 100; $digitsByWord = $spelling[$digits].' '; $number = $number % 100; } if ($number > 9 && $number <20){ $digitsByWord = $digitsByWord.$spelling[$number].' '; return $digitsByWord; } if ($number > 19){ $digits = floor($number / 10) * 10; $digitsByWord = $digitsByWord.$spelling[$digits].' '; $number = $number % 10; } if ($number > 0){ if ($isFemale == 1 && $number == 1){ $digitsByWord = $digitsByWord.$femaleSpelling[1].' '; } elseif ($isFemale == 1 && $number == 2) { $digitsByWord = $digitsByWord.$femaleSpelling[2].' '; } else { $digitsByWord = $digitsByWord.$spelling[$number].' '; } } return $digitsByWord; } function numberToText($number) { for ($i = 0; $i < 3; $i++){ $threeDigits[$i] = $number % 1000; $number =floor($number / 1000); } $threeDigits = array_reverse($threeDigits); for ($i = 0; $i < 2; $i++){ if ($threeDigits[$i] == 0){ array_shift($threeDigits); } } $threeDigitsWords = array(); foreach ($threeDigits as $key => $value) { if ($key == 1){ $isFemale = 1; } else { $isFemale = 0; } $threeDigitsWords[$key] = smallNumberToText($value, $isFemale); $threeDigitsWords[$key] = $threeDigitsWords[$key].' '.inclineWord($value, $key); } return implode(" ", $threeDigitsWords); } /* Вызовем функцию несколько раз */ $amount1 = 108949011; echo $amount1, "\n"; $text1 = numberToText($amount1); echo "На вашем счету {$text1}\n";
Output for git.master, git.master_jit, rfc.property-hooks
108949011 На вашем счету сто восемь миллионов девятьсот сорок девять тысяч одиннадцать рубль

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
51.4 ms | 401 KiB | 8 Q