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).'m'; //} 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 %10s %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 %10s %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.2.00.0060.00618.82
7.1.100.0070.00717.79
7.1.70.0070.00416.99
7.1.60.0090.01619.40
7.1.50.0140.01117.13
7.1.00.0030.07722.33
7.0.200.0000.00716.84
7.0.140.0030.07721.95
7.0.60.0130.07020.04
7.0.50.0070.08017.90
7.0.40.0100.07320.02
7.0.30.0300.03020.19
7.0.20.0270.05720.24
7.0.10.0000.05320.20
7.0.00.0070.08320.23
5.6.210.0000.09320.65
5.6.200.0000.06318.19
5.6.190.0030.05020.61
5.6.180.0300.04020.50
5.6.170.0430.07020.45
5.6.160.0030.05320.55
5.6.150.0000.08318.27
5.6.140.0070.05718.14
5.6.130.0170.07718.18
5.6.120.0070.08320.83
5.6.110.0070.08321.00
5.6.100.0100.03721.04
5.6.90.0130.03720.91
5.6.80.0100.06720.40
5.5.350.0300.07320.44
5.5.340.0230.06317.99
5.5.330.0070.04320.40
5.5.320.0230.04320.31
5.5.310.0200.06020.32
5.5.300.0170.07017.98
5.5.290.0100.08317.96
5.5.280.0070.05320.91
5.5.270.0030.09020.92
5.5.260.0000.05720.82
5.5.250.0030.04020.49
5.5.240.0130.03320.31
5.4.450.0130.04719.64
5.4.440.0300.04319.55
5.4.430.0300.04319.56
5.4.420.0300.03719.30
5.4.410.0630.04319.05
5.4.400.0270.03719.19
5.4.390.0330.04719.23
5.4.380.0470.07318.82
5.4.370.0200.05718.80
5.4.360.0300.05718.73
5.4.350.0330.05718.84
5.4.340.0270.06018.59
5.4.320.0060.03612.54
5.4.310.0030.04112.54
5.4.300.0080.03612.54
5.4.290.0080.04012.54
5.4.280.0080.03812.43
5.4.270.0050.03912.43
5.4.260.0070.04012.43
5.4.250.0050.04212.44
5.4.240.0090.03412.43
5.4.230.0060.03812.42
5.4.220.0070.03512.43
5.4.210.0050.03712.43
5.4.200.0040.04112.43
5.4.190.0060.05512.42
5.4.180.0090.05112.42
5.4.170.0050.05512.44
5.4.160.0100.04012.43
5.4.150.0060.04912.43
5.4.140.0080.03612.11
5.4.130.0070.03512.09
5.4.120.0070.04012.05
5.4.110.0060.05212.05
5.4.100.0100.04412.05
5.4.90.0060.03812.05
5.4.80.0030.04112.04
5.4.70.0060.03612.04
5.4.60.0100.03212.04
5.4.50.0060.03712.04
5.4.40.0060.03712.03
5.4.30.0080.03412.03
5.4.20.0040.03812.03
5.4.10.0050.03612.03
5.4.00.0060.03811.52
5.3.290.0070.03912.80
5.3.280.0070.03912.73
5.3.270.0050.04212.74
5.3.260.0060.04112.74
5.3.250.0060.03912.74
5.3.240.0060.04312.75
5.3.230.0020.05312.73
5.3.220.0040.04312.70
5.3.210.0080.05512.71
5.3.200.0080.05212.70
5.3.190.0100.05012.70
5.3.180.0090.05212.70
5.3.170.0080.05212.70
5.3.160.0060.05412.70
5.3.150.0080.05412.70
5.3.140.0060.04012.69
5.3.130.0050.04012.69
5.3.120.0050.04012.68
5.3.110.0050.04112.68
5.3.100.0060.04612.17
5.3.90.0100.05012.15
5.3.80.0050.04412.14
5.3.70.0040.04012.14
5.3.60.0060.04312.13
5.3.50.0080.04012.07
5.3.40.0060.03812.07
5.3.30.0060.03612.04
5.3.20.0060.03711.81
5.3.10.0070.03611.78
5.3.00.0040.04411.76
5.2.170.0050.0329.27
5.2.160.0040.0349.28
5.2.150.0090.0459.28
5.2.140.0140.0649.28
5.2.130.0060.0319.23
5.2.120.0030.0339.24
5.2.110.0030.0329.24
5.2.100.0020.0339.23
5.2.90.0050.0309.23
5.2.80.0060.0319.23
5.2.70.0060.0319.22
5.2.60.0060.0309.18
5.2.50.0060.0309.15
5.2.40.0040.0309.13
5.2.30.0060.0329.10
5.2.20.0080.0369.09
5.2.10.0080.0269.00
5.2.00.0140.0468.85
5.1.60.0030.0288.15
5.1.50.0040.0358.14
5.1.40.0040.0368.13
5.1.30.0140.0358.47
5.1.20.0030.0288.50
5.1.10.0040.0288.22
5.1.00.0060.0268.21
5.0.50.0040.0216.70
5.0.40.0040.0206.57
5.0.30.0050.0306.38
5.0.20.0010.0246.37
5.0.10.0050.0216.35
5.0.00.0020.0326.34
4.4.90.0030.0154.78
4.4.80.0040.0174.76
4.4.70.0050.0154.75
4.4.60.0030.0154.75
4.4.50.0000.0184.77
4.4.40.0020.0264.71
4.4.30.0020.0174.76
4.4.20.0030.0174.84
4.4.10.0020.0184.85
4.4.00.0040.0244.76
4.3.110.0030.0164.67
4.3.100.0040.0154.66
4.3.90.0050.0134.63
4.3.80.0020.0254.63
4.3.70.0030.0154.62
4.3.60.0050.0174.63
4.3.50.0030.0214.63
4.3.40.0020.0254.58
4.3.30.0030.0163.39
4.3.20.0010.0183.37
4.3.10.0030.0153.32
4.3.00.0100.01315.91

preferences:
33.38 ms | 400 KiB | 5 Q