3v4l.org

run code in 300+ PHP versions simultaneously
<?php if (phpversion() < '5.2.1') { die('php sucks'); } function gdr_encode($val) { // all characters that json encode without escaping $chrs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !#$%&\'()*+,-.:;<=>?@[]^_`{|}~'; $base = strlen($chrs); $str = ''; while ($val > 0) { $str = $chrs[$val % $base] . $str; $val = (int)($val / $base); } return $str; } function gdr_decode($str) { // all characters that json encode without escaping $chrs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !#$%&\'()*+,-.:;<=>?@[]^_`{|}~'; $base = strlen($chrs); $map = array(); for ($i=0; $i<$base; $i++) { $map[$chrs[$i]] = $i; } $val = 0; for ($i=0; $i<strlen($str); $i++) { $val *= $base; $val += (int)$map[$str[$i]]; } return $val; } function duration($val) { if ($val < 24) { return sprintf('%d', $val).' hour'; } if ($val < 24*10) { return sprintf('%1.2f', $val/24).' day '; } if ($val < 168*10) { return sprintf('%1.2f', $val/168).' week'; } if ($val < 730*10) { return sprintf('%1.2f', $val/730).' mnth'; } if ($val < 8760*100) { return sprintf('%1.2f', $val/8760).' year'; } if ($val < 876582*10) { return sprintf('%1.2f', $val/876582).' cent'; } return sprintf('%1.2f', $val/8.766e6).' mill'; } function cmp($val) { return strlen(gdr_encode($val))+2-strlen($val); } function insert(&$vals, $n) { $min = intval('1'.str_repeat('0', $n-1)); $max = intval(str_repeat('9', $n)); $vals[] = $min; $vals[] = $max; $cmp_min = cmp($min); $cmp_max = cmp($max); if ($cmp_min === $cmp_max) { return; } // binary search for edges if ($cmp_min+1 !== $cmp_max) { echo "ERROR: invalid search assumption: possibly missing edges: [$min => $cmp_min, $max => $cmp_max]\n"; } while ($min <= $max) { $mid = (int)(($min+$max)/2); $cmp_mid = cmp($mid); //echo "trace: [$min => $cmp_min, $mid => $cmp_mid, $max=>$cmp_max]\n"; if ($cmp_min === $cmp_mid && $cmp_mid !== cmp($mid+1)) { $vals[] = $mid; $vals[] = $mid+1; return; } //$vals[] = $mid; // include visited values in results if ($min === $max) { return; } if ($cmp_min < $cmp_mid) { $max = $mid-1; } else { $min = $mid+1; } } } $vals = array(0); for ($i=1; $i<8; $i++) { insert($vals, $i); } $vals = array_unique($vals); sort($vals); echo sprintf("%7s %7s %11s %4s\n", 'num', 'str', 'duration', 'cmp'); foreach ($vals as $val) { $enc = gdr_encode($val); $dec = gdr_decode($enc); if ($dec !== $val) { echo "ERROR: $val => $enc => $dec\n"; } else { echo sprintf("%7d %7s %11s %4d\n", $dec, "\"$enc\"", duration($val), cmp($val)); } }

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)
7.4.00.0070.01215.06
7.3.120.0070.01014.95
7.3.110.0080.00714.99
7.3.100.0060.00914.89
7.3.90.0060.00714.90
7.3.80.0040.00814.78
7.3.70.0060.00714.90
7.3.60.0100.00414.91
7.3.50.0060.00414.92
7.3.40.0070.00714.94
7.3.30.0060.00714.84
7.3.20.0110.00416.69
7.3.10.0060.00616.67
7.3.00.0060.00716.68
7.2.250.0100.00915.21
7.2.240.0040.01515.21
7.2.230.0060.00914.94
7.2.220.0040.00615.18
7.2.210.0060.01015.30
7.2.200.0030.00915.05
7.2.190.0080.00815.22
7.2.180.0050.00915.13
7.2.170.0080.00615.02
7.2.00.0030.00919.19
7.1.330.0050.01015.92
7.1.320.0030.00915.89
7.1.310.0040.00815.93
7.1.300.0040.00615.86
7.1.290.0050.00915.89
7.1.280.0050.00615.79
7.1.270.0050.00815.68
7.1.260.0060.00915.87
7.1.100.0030.01018.27
7.1.70.0040.00417.15
7.1.60.0060.01919.40
7.1.50.0090.00417.11
7.1.00.0030.07722.57
7.0.200.0000.00716.79
7.0.140.0000.07721.99
7.0.60.0100.06719.98
7.0.50.0070.07317.77
7.0.40.0100.07320.15
7.0.30.0330.07020.07
7.0.20.0230.03720.09
7.0.10.0100.05320.10
7.0.00.0070.05320.33
5.6.280.0100.07020.89
5.6.210.0030.04020.65
5.6.200.0100.07718.30
5.6.190.0070.08720.76
5.6.180.0230.04320.42
5.6.170.0300.07020.41
5.6.160.0100.05320.55
5.6.150.0070.07318.30
5.6.140.0000.05018.25
5.6.130.0130.03318.19
5.6.120.0030.06321.00
5.6.110.0070.06721.17
5.6.100.0170.06720.92
5.6.90.0070.07021.04
5.6.80.0130.05020.56
5.5.350.3030.03320.41
5.5.340.0030.05717.94
5.5.330.0100.07320.29
5.5.320.0270.04320.24
5.5.310.0330.08020.37
5.5.300.0030.08717.96
5.5.290.0000.05017.99
5.5.280.0030.06020.86
5.5.270.0100.10020.75
5.5.260.0100.07020.66
5.5.250.0000.06020.64
5.5.240.0200.07020.29
5.4.450.0870.06319.43
5.4.440.0100.06719.59
5.4.430.0270.06719.54
5.4.420.0270.04719.28
5.4.410.0670.06719.30
5.4.400.0430.04718.62
5.4.390.0330.05718.61
5.4.380.0070.06018.77
5.4.370.0070.04018.56
5.4.360.0170.06318.79
5.4.350.0130.11212.05
5.4.340.0040.04612.05
5.4.320.0060.04012.54
5.4.310.0070.04312.54
5.4.300.0080.03712.54
5.4.290.0040.04212.54
5.4.280.0040.03812.43
5.4.270.0060.04012.43
5.4.260.0070.04112.43
5.4.250.0070.04412.43
5.4.240.0050.04612.43
5.4.230.0040.04312.43
5.4.220.0070.03812.43
5.4.210.0060.03512.42
5.4.200.0060.03912.42
5.4.190.0030.04012.42
5.4.180.0080.03412.43
5.4.170.0070.03612.43
5.4.160.0060.04112.43
5.4.150.0050.03712.42
5.4.140.0060.03712.10
5.4.130.0050.03712.10
5.4.120.0060.03512.05
5.4.110.0070.03612.04
5.4.100.0060.03612.05
5.4.90.0070.03712.05
5.4.80.0060.03712.05
5.4.70.0050.03512.04
5.4.60.0100.03012.05
5.4.50.0080.03312.05
5.4.40.0040.05112.04
5.4.30.0060.03712.03
5.4.20.0070.03612.03
5.4.10.0050.03612.03
5.4.00.0080.03411.52
5.3.290.0060.04212.80
5.3.280.0060.03812.73
5.3.270.0100.04212.74
5.3.260.0060.04312.74
5.3.250.0080.03612.74
5.3.240.0060.03812.74
5.3.230.0070.03812.73
5.3.220.0060.03912.71
5.3.210.0080.03912.71
5.3.200.0100.03512.70
5.3.190.0070.03812.70
5.3.180.0070.03912.70
5.3.170.0040.03912.70
5.3.160.0080.03712.70
5.3.150.0080.04012.70
5.3.140.0060.04012.70
5.3.130.0050.04312.68
5.3.120.0050.04112.68
5.3.110.0070.04812.68
5.3.100.0090.03812.17
5.3.90.0040.04712.15
5.3.80.0090.04112.14
5.3.70.0080.04512.14
5.3.60.0060.03812.13
5.3.50.0070.03612.07
5.3.40.0080.03712.07
5.3.30.0060.03712.04
5.3.20.0050.03811.81
5.3.10.0080.04411.78
5.3.00.0040.04011.77
5.2.170.0040.0339.28
5.2.160.0060.0309.28
5.2.150.0080.0299.28
5.2.140.0040.0329.27
5.2.130.0040.0309.24
5.2.120.0070.0279.24
5.2.110.0040.0419.24
5.2.100.0080.0349.24
5.2.90.0070.0429.24
5.2.80.0100.0529.23
5.2.70.0080.0419.23
5.2.60.0100.0489.19
5.2.50.0070.0309.16
5.2.40.0040.0319.13
5.2.30.0080.0409.10
5.2.20.0050.0329.10
5.2.10.0070.0399.00
5.2.00.0060.0308.86
5.1.60.0030.0378.15
5.1.50.0060.0258.14
5.1.40.0050.0358.13
5.1.30.0040.0268.47
5.1.20.0030.0318.49
5.1.10.0070.0248.22
5.1.00.0030.0278.22
5.0.50.0010.0246.71
5.0.40.0030.0206.56
5.0.30.0040.0316.38
5.0.20.0060.0166.36
5.0.10.0040.0226.35
5.0.00.0050.0296.34
4.4.90.0030.0154.78
4.4.80.0040.0144.76
4.4.70.0020.0164.75
4.4.60.0020.0164.76
4.4.50.0020.0164.77
4.4.40.0020.0264.71
4.4.30.0010.0174.76
4.4.20.0060.0184.84
4.4.10.0040.0204.85
4.4.00.0030.0254.76
4.3.110.0020.0174.67
4.3.100.0030.0164.66
4.3.90.0060.0304.64
4.3.80.0040.0314.63
4.3.70.0060.0174.63
4.3.60.0020.0194.63
4.3.50.0020.0224.63
4.3.40.0020.0274.58
4.3.30.0020.0173.39
4.3.20.0020.0223.37
4.3.10.0040.0143.32
4.3.00.0170.0207.15

preferences:
36.43 ms | 400 KiB | 5 Q