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"; }
Output for 5.6.38, 7.0.33, 7.1.25 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.18, 8.5.0 - 8.5.3
FSGDEJLPRNYKOUAMQTCIHVWZXB S before G = true E before T = true G before A = true P before Z = true L before Z = true F before H = true D before Y = true J before Y = true N before O = true R before Y = true Y before W = true U before T = true H before W = true T before Z = true Q before B = true O before Z = true K before W = true M before C = true A before Z = true C before X = true I before V = true V before W = true W before X = true Z before B = true X before B = true D before M = true S before Z = true A before B = true V before Z = true Q before Z = true O before W = true S before E = true L before B = true P before Y = true K before M = true W before Z = true Y before Q = true J before M = true U before H = true Y before U = true D before A = true C before V = true G before J = true O before C = true P before H = true M before B = true T before C = true A before W = true C before B = true Q before I = true O before A = true N before H = true Q before C = true G before W = true V before X = true A before V = true S before C = true O before M = true E before L = true D before V = true P before N = true O before I = true P before K = true N before A = true A before X = true L before A = true L before T = true I before X = true N before C = true N before W = true Y before M = true R before A = true O before X = true G before T = true S before P = true E before M = true E before A = true E before W = true F before D = true U before C = true R before Z = true A before C = true F before K = true L before V = true F before T = true W before B = true Y before A = true D before T = true S before V = true Y before O = true K before B = true N before V = true Y before I = true Z before X = true E before B = true P before O = true D before R = true Q before X = true E before K = true J before R = true L before N = true

preferences:
115.07 ms | 2112 KiB | 4 Q