3v4l.org

run code in 300+ PHP versions simultaneously
<?php $input = <<<EOT Step S must be finished before step G can begin. Step E must be finished before step T can begin. Step G must be finished before step A can begin. Step P must be finished before step Z can begin. Step L must be finished before step Z can begin. Step F must be finished before step H can begin. Step D must be finished before step Y can begin. Step J must be finished before step Y can begin. Step N must be finished before step O can begin. Step R must be finished before step Y can begin. Step Y must be finished before step W can begin. Step U must be finished before step T can begin. Step H must be finished before step W can begin. Step T must be finished before step Z can begin. Step Q must be finished before step B can begin. Step O must be finished before step Z can begin. Step K must be finished before step W can begin. Step M must be finished before step C can begin. Step A must be finished before step Z can begin. Step C must be finished before step X can begin. Step I must be finished before step V can begin. Step V must be finished before step W can begin. Step W must be finished before step X can begin. Step Z must be finished before step B can begin. Step X must be finished before step B can begin. Step D must be finished before step M can begin. Step S must be finished before step Z can begin. Step A must be finished before step B can begin. Step V must be finished before step Z can begin. Step Q must be finished before step Z can begin. Step O must be finished before step W can begin. Step S must be finished before step E can begin. Step L must be finished before step B can begin. Step P must be finished before step Y can begin. Step K must be finished before step M can begin. Step W must be finished before step Z can begin. Step Y must be finished before step Q can begin. Step J must be finished before step M can begin. Step U must be finished before step H can begin. Step Y must be finished before step U can begin. Step D must be finished before step A can begin. Step C must be finished before step V can begin. Step G must be finished before step J can begin. Step O must be finished before step C can begin. Step P must be finished before step H can begin. Step M must be finished before step B can begin. Step T must be finished before step C can begin. Step A must be finished before step W can begin. Step C must be finished before step B can begin. Step Q must be finished before step I can begin. Step O must be finished before step A can begin. Step N must be finished before step H can begin. Step Q must be finished before step C can begin. Step G must be finished before step W can begin. Step V must be finished before step X can begin. Step A must be finished before step V can begin. Step S must be finished before step C can begin. Step O must be finished before step M can begin. Step E must be finished before step L can begin. Step D must be finished before step V can begin. Step P must be finished before step N can begin. Step O must be finished before step I can begin. Step P must be finished before step K can begin. Step N must be finished before step A can begin. Step A must be finished before step X can begin. Step L must be finished before step A can begin. Step L must be finished before step T can begin. Step I must be finished before step X can begin. Step N must be finished before step C can begin. Step N must be finished before step W can begin. Step Y must be finished before step M can begin. Step R must be finished before step A can begin. Step O must be finished before step X can begin. Step G must be finished before step T can begin. Step S must be finished before step P can begin. Step E must be finished before step M can begin. Step E must be finished before step A can begin. Step E must be finished before step W can begin. Step F must be finished before step D can begin. Step U must be finished before step C can begin. Step R must be finished before step Z can begin. Step A must be finished before step C can begin. Step F must be finished before step K can begin. Step L must be finished before step V can begin. Step F must be finished before step T can begin. Step W must be finished before step B can begin. Step Y must be finished before step A can begin. Step D must be finished before step T can begin. Step S must be finished before step V can begin. Step Y must be finished before step O can begin. Step K must be finished before step B can begin. Step N must be finished before step V can begin. Step Y must be finished before step I can begin. Step Z must be finished before step X can begin. Step E must be finished before step B can begin. Step P must be finished before step O can begin. Step D must be finished before step R can begin. Step Q must be finished before step X can begin. Step E must be finished before step K can begin. Step J must be finished before step R can begin. Step L must be finished before step N can begin. EOT; $input_strings_array = explode(PHP_EOL, $input); $before_after_pairs = []; foreach ($input_strings_array as $input_string) { preg_match("/Step ([A-Z]) must be finished before step ([A-Z]) can begin\./", $input_string, $steps); $before_after_pairs[] = ['before'=>$steps[1], 'after' => $steps[2]]; } $all_pairs = $before_after_pairs; $str = ''; $z = 26; $x = 0; $letters_array = []; while ($x < 26) { $possible_letters = []; foreach ($before_after_pairs as $pair) { $has_match = false; foreach ($before_after_pairs as $pair2) { if ($pair['after'] === $pair2['before']) { $has_match = true; } } if ($has_match === false) { $possible_letters[] = $pair['after']; } } $last_letters = array_unique($possible_letters); rsort($last_letters); foreach ($last_letters as $letter) { $letters_array[$z] = $letter; $z--; foreach($before_after_pairs as $key => $pair) { if ($pair['after'] == $letter) { unset($before_after_pairs[$key]); } } } $x++; } $beginning_letters = []; foreach(range('A','Z') as $letter) { if (!in_array($letter, $letters_array)) { $beginning_letters[] = $letter; } } rsort($beginning_letters); foreach ($beginning_letters as $letter) { $letters_array[$z] = $letter; $z--; } ksort($letters_array); $output = implode($letters_array); echo $output; echo "\r\n\r\n"; foreach ($all_pairs as $pair) { echo $pair['before'] . " before " . $pair['after'] . " = "; if(preg_match("/" . $pair['before'] . ".*" . $pair['after'] . "/", $output)) { echo "true"; } else { echo "false"; } echo "\r\n\r\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.5.30.0110.01221.30
8.5.20.0110.01019.55
8.5.10.0120.01417.23
8.5.00.0130.01420.55
8.4.180.0120.01522.26
8.4.170.0100.01624.04
8.4.160.0130.01923.54
8.4.150.0060.00917.14
8.4.140.0180.01517.78
8.4.130.0130.01018.10
8.4.120.0120.01220.80
8.4.110.0030.00722.72
8.4.100.0070.00718.07
8.4.90.0130.01318.91
8.4.80.0100.01118.27
8.4.70.0140.01218.02
8.4.60.0160.01019.20
8.4.50.0140.01320.55
8.4.40.0140.01419.61
8.4.30.0090.01219.67
8.4.20.0160.01320.56
8.4.10.0110.01418.04
8.3.300.0160.01118.60
8.3.290.0100.01618.66
8.3.280.0110.01618.62
8.3.270.0120.01916.77
8.3.260.0140.01117.02
8.3.250.0140.00819.34
8.3.240.0130.01017.01
8.3.230.0030.00917.01
8.3.220.0110.01417.63
8.3.210.0110.01018.72
8.3.200.0070.00416.84
8.3.190.0030.00717.34
8.3.180.0120.01317.17
8.3.170.0100.01317.42
8.3.160.0160.00616.94
8.3.150.0180.00720.73
8.3.140.0000.01017.38
8.3.130.0070.00318.65
8.3.120.0040.00819.18
8.3.110.0070.00720.94
8.3.100.0090.00316.91
8.3.90.0080.00416.90
8.3.80.0040.00818.68
8.3.70.0040.01418.43
8.3.60.0140.00718.68
8.3.50.0100.00918.35
8.3.40.0100.01319.38
8.3.30.0090.00919.29
8.3.20.0070.00322.02
8.3.10.0070.00323.61
8.3.00.0070.00321.88
8.2.300.0110.01418.38
8.2.290.0100.01120.48
8.2.280.0040.00620.73
8.2.270.0130.01017.45
8.2.260.0040.01817.11
8.2.250.0030.00717.11
8.2.240.0040.00717.62
8.2.230.0050.00522.58
8.2.220.0080.00324.06
8.2.210.0070.01126.77
8.2.200.0030.01316.75
8.2.190.0100.01317.00
8.2.180.0090.00918.60
8.2.170.0100.01319.41
8.2.160.0070.01122.96
8.2.150.0070.00325.66
8.2.140.0030.00824.66
8.2.130.0030.00726.16
8.2.120.0070.00718.18
8.2.110.0040.00822.50
8.2.100.0070.00718.22
8.2.90.0030.01317.88
8.2.80.0070.00418.13
8.2.70.0070.00318.30
8.2.60.0060.00618.41
8.2.50.0030.00918.13
8.2.40.0060.00319.73
8.2.30.0040.00719.55
8.2.20.0030.00718.29
8.2.10.0030.00620.80
8.2.00.0070.00419.68
8.1.340.0150.01117.86
8.1.330.0050.00724.18
8.1.320.0120.01316.49
8.1.310.0190.00018.74
8.1.300.0120.00020.16
8.1.290.0080.00418.88
8.1.280.0070.01725.92
8.1.270.0030.00719.30
8.1.260.0040.00726.35
8.1.250.0100.00728.09
8.1.240.0000.01123.88
8.1.230.0060.00918.08
8.1.220.0030.00718.04
8.1.210.0070.00318.77
8.1.200.0000.01417.73
8.1.190.0030.00817.63
8.1.180.0040.00718.10
8.1.170.0000.01018.96
8.1.160.0000.01119.14
8.1.150.0110.00019.16
8.1.140.0000.01124.09
8.1.130.0030.00920.46
8.1.120.0070.00717.89
8.1.110.0030.00717.81
8.1.100.0030.00817.76
8.1.90.0100.00017.84
8.1.80.0060.00617.79
8.1.70.0030.00717.90
8.1.60.0030.00917.99
8.1.50.0080.00417.93
8.1.40.0040.00717.87
8.1.30.0030.00717.98
8.1.20.0030.00917.97
8.1.10.0030.00917.87
8.1.00.0080.00417.93
8.0.300.0030.00818.77
8.0.290.0080.00817.00
8.0.280.0000.01018.64
8.0.270.0000.01017.36
8.0.260.0000.00918.69
8.0.250.0030.00617.20
8.0.240.0060.00317.36
8.0.230.0000.01017.26
8.0.220.0030.00717.23
8.0.210.0080.00317.16
8.0.200.0000.01017.37
8.0.190.0070.00317.29
8.0.180.0030.00817.34
8.0.170.0090.00317.27
8.0.160.0070.00317.15
8.0.150.0030.00917.21
8.0.140.0000.01017.21
8.0.130.0000.00813.66
8.0.120.0030.00717.23
8.0.110.0000.01117.09
8.0.100.0070.00317.26
8.0.90.0030.00717.30
8.0.80.0100.01817.31
8.0.70.0060.00617.14
8.0.60.0030.00717.16
8.0.50.0080.00417.23
8.0.30.0100.01217.56
8.0.20.0150.01217.36
8.0.10.0080.00317.38
8.0.00.0090.02017.24
7.4.330.0030.00316.87
7.4.320.0060.00316.89
7.4.300.0000.01216.84
7.4.290.0030.00617.00
7.4.280.0080.00416.72
7.4.270.0000.01016.89
7.4.260.0000.01016.98
7.4.250.0050.00516.98
7.4.240.0050.00516.83
7.4.230.0030.00616.86
7.4.220.0060.00616.92
7.4.210.0050.01616.92
7.4.200.0000.01016.86
7.4.160.0110.01616.90
7.4.140.0110.01817.86
7.4.130.0070.01716.85
7.4.120.0120.01616.82
7.4.110.0120.01616.86
7.4.100.0110.01716.91
7.4.90.0140.01416.92
7.4.80.0150.02019.39
7.4.70.0190.01417.03
7.4.60.0100.01316.83
7.4.50.0090.00916.76
7.4.40.0060.01817.04
7.4.00.0070.01715.27
7.3.330.0000.00813.56
7.3.320.0060.00313.50
7.3.310.0100.00016.75
7.3.300.0000.01116.60
7.3.290.0030.00716.73
7.3.280.0120.01016.78
7.3.260.0150.01216.84
7.3.240.0150.01217.00
7.3.230.0030.02016.72
7.3.210.0060.01816.87
7.3.200.0140.01817.06
7.3.190.0100.02016.82
7.3.180.0090.01316.89
7.3.170.0150.01516.79
7.3.160.0160.01016.99
7.3.120.0050.01815.17
7.3.110.0070.01615.21
7.3.100.0120.00915.20
7.3.90.0070.01415.26
7.3.80.0020.01715.31
7.3.70.0050.01315.35
7.3.60.0040.01215.17
7.3.50.0050.01315.19
7.3.40.0080.01315.11
7.3.30.0050.01315.27
7.3.20.0050.01317.04
7.3.10.0070.01016.84
7.3.00.0920.01516.46
7.2.330.0120.01317.12
7.2.320.0060.01617.09
7.2.310.0110.01417.07
7.2.300.0080.01616.94
7.2.290.0030.02417.02
7.2.250.0060.01915.48
7.2.240.0110.01315.42
7.2.230.0060.01215.46
7.2.220.0070.01415.47
7.2.210.0060.01315.53
7.2.200.0050.01515.65
7.2.190.0070.01215.42
7.2.180.0060.01315.41
7.2.170.0080.01315.21
7.2.160.0030.01415.48
7.2.150.0030.01317.13
7.2.140.0060.01317.16
7.2.130.0970.01316.43
7.2.120.2040.01216.56
7.2.110.1980.01216.51
7.2.100.2270.01116.48
7.2.90.2280.01016.44
7.2.80.0990.01416.51
7.2.70.0720.01116.36
7.2.60.0790.01116.52
7.2.50.0530.00816.51
7.2.40.1140.01016.73
7.2.30.0130.01416.66
7.2.20.0180.01216.64
7.2.10.0340.01116.69
7.2.00.1040.01216.61
7.1.330.0110.01016.15
7.1.320.0030.01516.16
7.1.310.0050.01316.17
7.1.300.0050.01216.06
7.1.290.0060.01316.14
7.1.280.0040.01516.04
7.1.270.0090.00816.08
7.1.260.0080.01416.18
7.1.250.1110.01315.50
7.0.330.5500.01313.98
5.6.380.0110.00914.71

preferences:
59.99 ms | 2130 KiB | 5 Q