3v4l.org

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

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0160.00616.75
8.3.50.0250.00416.50
8.3.40.0150.00018.78
8.3.30.0040.01118.64
8.3.20.0040.00420.29
8.3.10.0080.00021.73
8.3.00.0080.00023.61
8.2.180.0120.00618.54
8.2.170.0040.01122.96
8.2.160.0030.01019.59
8.2.150.0040.00425.66
8.2.140.0040.00424.66
8.2.130.0040.00422.43
8.2.120.0040.00426.16
8.2.110.0040.00821.24
8.2.100.0040.00818.34
8.2.90.0060.00318.41
8.2.80.0040.00418.16
8.2.70.0000.00818.18
8.2.60.0000.00818.28
8.2.50.0000.00818.10
8.2.40.0000.00819.45
8.2.30.0000.00719.49
8.2.20.0040.00418.15
8.2.10.0030.00518.20
8.2.00.0080.00018.33
8.1.280.0040.01125.92
8.1.270.0000.00823.91
8.1.260.0000.00726.35
8.1.250.0040.00428.09
8.1.240.0060.00322.18
8.1.230.0090.00322.86
8.1.220.0000.00817.89
8.1.210.0040.00418.77
8.1.200.0070.00417.38
8.1.190.0040.00417.35
8.1.180.0090.00018.10
8.1.170.0000.00818.64
8.1.160.0040.00419.00
8.1.150.0040.00420.25
8.1.140.0040.00419.73
8.1.130.0030.00319.06
8.1.120.0000.00717.47
8.1.110.0080.00017.59
8.1.100.0030.00517.61
8.1.90.0000.00817.55
8.1.80.0040.00417.49
8.1.70.0070.00017.59
8.1.60.0020.00517.69
8.1.50.0000.00717.59
8.1.40.0030.00617.69
8.1.30.0040.00417.79
8.1.20.0050.00317.80
8.1.10.0000.00817.56
8.1.00.0040.00417.63
8.0.300.0070.00019.77
8.0.290.0000.00916.88
8.0.280.0040.00418.60
8.0.270.0070.00016.93
8.0.260.0040.00417.27
8.0.250.0000.00717.10
8.0.240.0060.00316.95
8.0.230.0030.00517.11
8.0.220.0000.00716.90
8.0.210.0000.00716.93
8.0.200.0030.00317.03
8.0.190.0030.00517.08
8.0.180.0030.00517.02
8.0.170.0080.00017.00
8.0.160.0000.00717.02
8.0.150.0000.00816.96
8.0.140.0030.00316.93
8.0.130.0000.00913.38
8.0.120.0040.00416.85
8.0.110.0030.00516.90
8.0.100.0050.00317.04
8.0.90.0000.00717.02
8.0.80.0130.00316.97
8.0.70.0040.00416.86
8.0.60.0040.00416.95
8.0.50.0000.00816.90
8.0.30.0090.00917.06
8.0.20.0110.00817.40
8.0.10.0000.00717.11
8.0.00.0100.00716.89
7.4.330.0000.00515.55
7.4.320.0040.00416.63
7.4.300.0000.00716.71
7.4.290.0030.00316.58
7.4.280.0080.00016.52
7.4.270.0000.00816.63
7.4.260.0040.00716.68
7.4.250.0070.00016.65
7.4.240.0000.00716.50
7.4.230.0030.00316.73
7.4.220.0150.01016.74
7.4.210.0040.01016.80
7.4.200.0080.00016.45
7.4.160.0100.00916.50
7.4.150.0120.00617.40
7.4.140.0080.01117.86
7.4.130.0080.01116.65
7.4.120.0140.00816.56
7.4.110.0070.01016.75
7.4.100.0070.01116.52
7.4.90.0060.01216.69
7.4.80.0170.00619.39
7.4.70.0120.00416.79
7.4.60.0070.01016.49
7.4.50.0040.01416.81
7.4.40.0080.00816.78
7.4.30.0130.00916.60
7.4.00.0090.00615.00
7.3.330.0030.00313.45
7.3.320.0000.00513.30
7.3.310.0040.00416.51
7.3.300.0000.00616.47
7.3.290.0100.00716.49
7.3.280.0070.01016.46
7.3.270.0060.01317.40
7.3.260.0110.00916.73
7.3.250.0140.00816.59
7.3.240.0120.00516.42
7.3.230.0090.00916.45
7.3.210.0000.01716.22
7.3.200.0030.01316.54
7.3.190.0080.01316.35
7.3.180.0030.01716.47
7.3.170.0130.01016.73
7.3.160.0090.00616.52
7.3.120.0090.01114.84
7.3.110.0020.01614.94
7.3.100.0090.00714.92
7.3.90.0050.00914.88
7.3.80.0080.00515.01
7.3.70.0060.00514.84
7.3.60.0060.00814.64
7.3.50.0070.00614.87
7.3.40.0070.00714.96
7.3.30.0040.01115.01
7.3.20.0060.00816.85
7.3.10.0050.01016.80
7.3.00.0080.00716.72
7.2.330.0090.01516.93
7.2.320.0110.01116.89
7.2.310.0070.01116.63
7.2.300.0110.00716.87
7.2.290.0090.00916.68
7.2.250.0070.01415.07
7.2.240.0060.01315.30
7.2.230.0070.00815.22
7.2.220.0070.00715.14
7.2.210.0050.01114.90
7.2.200.0030.01115.06
7.2.190.0030.01315.00
7.2.180.0050.01115.20
7.2.170.0030.01215.17
7.2.60.0110.00317.05
7.2.50.0070.00716.92
7.1.330.0130.00215.88
7.1.320.0020.00915.74
7.1.310.0020.01015.90
7.1.300.0030.01215.86
7.1.290.0030.01215.73
7.1.280.0030.01015.91
7.1.270.0010.01115.82
7.1.260.0040.01115.86
7.1.200.0040.00815.62
7.1.70.0000.00917.26
7.1.60.0060.00617.23
7.1.30.0200.06736.63
7.1.20.0300.05036.63
7.1.10.0200.06020.44
7.1.00.0130.06720.58
7.0.200.0060.01016.81
7.0.170.0230.06320.08
7.0.160.0130.05720.14
7.0.150.6800.07720.16
7.0.140.0230.05020.16
7.0.130.0100.06020.14
7.0.120.0130.07020.11
7.0.110.0100.06020.11
7.0.100.0100.06720.10
7.0.90.4000.07320.14
7.0.80.0200.05020.15
7.0.70.0130.07020.01
7.0.60.0170.05020.02
7.0.50.0100.06020.16
7.0.40.0270.04020.10
7.0.30.0130.05720.11
7.0.20.4200.05020.23
7.0.10.5270.05720.18
7.0.00.4200.08720.12

preferences:
56.27 ms | 400 KiB | 5 Q