3v4l.org

run code in 300+ PHP versions simultaneously
<?php 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).'h'; } if ($val < 24*10) { return sprintf('%1.1f', $val/24).'d'; } if ($val < 168*10) { return sprintf('%1.1f', $val/168).'w'; } //if ($val < 730*10) { // return sprintf('%1.1f', $val/730).'m'; //} return sprintf('%1.1f', $val/8760).'y'; } 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; } if ($cmp_min+1 !== $cmp_max) { echo "BAD SEARCH ASSUMPTION: [$min => $cmp_min, $max => $cmp_max]\n"; } while ($min <= $max) { $mid = (int)(($min+$max)/2); $cmp_mid = cmp($mid); echo "$min=>$cmp_min $mid=>$cmp_mid $max=>$cmp_max\n"; if ($cmp_min === $cmp_mid && $cmp_min+1 !== cmp($mid+1)) { $vals[] = $mid; $vals[] = $mid+1; return; } 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 %7s %4s\n", 'num', 'str', 'time', '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 %7s %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)
5.4.310.0090.04012.53
5.4.300.0080.03712.54
5.4.290.0060.05712.53
5.4.280.0070.04112.43
5.4.270.0100.04312.43
5.4.260.0080.03812.43
5.4.250.0070.03712.43
5.4.240.0090.03712.43
5.4.230.0070.03812.42
5.4.220.0060.03712.43
5.4.210.0070.03512.43
5.4.200.0100.03512.42
5.4.190.0050.03712.42
5.4.180.0040.03812.42
5.4.170.0040.03912.43
5.4.160.0070.03512.42
5.4.150.0080.03512.42
5.4.140.0050.04012.11
5.4.130.0080.03312.09
5.4.120.0060.03412.05
5.4.110.0060.03512.05
5.4.100.0050.04012.05
5.4.90.0080.04212.05
5.4.80.0080.04012.05
5.4.70.0030.03712.04
5.4.60.0070.03412.04
5.4.50.0050.03612.04
5.4.40.0030.03912.03
5.4.30.0050.03612.02
5.4.20.0050.03612.02
5.4.10.0080.03312.02
5.4.00.0090.03311.52
5.3.290.0070.04512.80
5.3.280.0060.03912.71
5.3.270.0070.03812.73
5.3.260.0060.03912.72
5.3.250.0080.03612.72
5.3.240.0040.03912.71
5.3.230.0050.03912.71
5.3.220.0070.04212.68
5.3.210.0090.03912.68
5.3.200.0070.03512.68
5.3.190.0070.03612.67
5.3.180.0050.03812.68
5.3.170.0040.05112.67
5.3.160.0070.04612.67
5.3.150.0050.04512.67
5.3.140.0110.03312.66
5.3.130.0060.05012.66
5.3.120.0070.03812.66
5.3.110.0040.04212.66
5.3.100.0080.03612.14
5.3.90.0030.03912.13
5.3.80.0070.03612.12
5.3.70.0050.03912.12
5.3.60.0070.03912.10
5.3.50.0060.03712.05
5.3.40.0050.03912.05
5.3.30.0070.04012.02
5.3.20.0030.04311.79
5.3.10.0070.04011.76
5.3.00.0120.04011.75
5.2.170.0050.0439.25
5.2.160.0040.0439.25
5.2.150.0080.0319.25
5.2.140.0080.0419.25
5.2.130.0070.0429.21
5.2.120.0060.0319.21
5.2.110.0070.0309.22
5.2.100.0050.0309.21
5.2.90.0040.0319.21
5.2.80.0020.0349.20
5.2.70.0040.0319.20
5.2.60.0060.0289.16
5.2.50.0090.0269.13
5.2.40.0060.0289.10
5.2.30.0070.0339.08
5.2.20.0060.0309.07
5.2.10.0060.0288.98
5.2.00.0040.0418.84
5.1.60.0050.0358.12
5.1.50.0040.0358.12
5.1.40.0040.0328.09
5.1.30.0060.0348.45
5.1.20.0050.0308.47
5.1.10.0050.0268.20
5.1.00.0070.0308.20
5.0.50.0040.0256.69
5.0.40.0050.0286.55
5.0.30.0050.0426.36
5.0.20.0060.0206.33
5.0.10.0050.0266.30
5.0.00.0060.0406.30
4.4.90.0020.0164.78
4.4.80.0020.0164.75
4.4.70.0010.0174.75
4.4.60.0030.0154.76
4.4.50.0040.0144.77
4.4.40.0060.0224.71
4.4.30.0040.0144.76
4.4.20.0030.0154.84
4.4.10.0030.0154.85
4.4.00.0050.0274.76
4.3.110.0030.0164.66
4.3.100.0010.0174.67
4.3.90.0020.0154.63
4.3.80.0030.0244.59
4.3.70.0020.0154.63
4.3.60.0040.0134.63
4.3.50.0020.0174.63
4.3.40.0020.0254.54
4.3.30.0040.0153.34
4.3.20.0030.0153.31
4.3.10.0010.0163.28
4.3.00.0000.0237.92

preferences:
139.46 ms | 1394 KiB | 7 Q