3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php /** * check matching od braces * * @param string $src target string to check * @return bool */ function brace_check($src) { $open_braces = str_split("({["); $close_braces = str_split(")}]"); $braces = array_merge($open_braces, $close_braces); $tokens = token_get_all($src); var_dump($tokens); //$tokens = array_filter($tokens,function($item){ return is_string($item); }); var_dump($tokens); $tokens = array_walk_recursive($tokens,function(&$item){ if (is_int($item)) $item = token_name($item); }); $open_brace_stack = array(); foreach($tokens as $key => $t){ if (in_array($t,$open_braces)){ array_push( $open_brace_stack, $t); } elseif (in_array($t,$close_braces)){ if ( empty($open_brace_stack) ){ return false; } $open_top = array_pop($open_brace_stack); $idx_open = array_search($open_top, $open_braces); $idx_close = array_search($t, $close_braces); if ( $idx_open !== $idx_close ){ return false; } } echo "token:$t" . PHP_EOL; echo "open_brace_stack:" . print_r($open_brace_stack,true) . PHP_EOL; } return true; } //========================= // test code $html_case = <<<HTML <?php ?> <html> ... <ul> <li>1)...</li> <li>2)...</li> </ul> ... <?php ... ?> ... </html> HTML; $expressions = array(")(){}","[]({})","([])","{()[]}","([)]",$html_case); //var_dump(array_map('brace_check', $expressions)); echo brace_check("([)]");
based on EeJfB
Output for 7.0.0 - 7.3.0rc2
array(1) { [0]=> array(3) { [0]=> int(321) [1]=> string(4) "([)]" [2]=> int(1) } } array(1) { [0]=> array(3) { [0]=> int(321) [1]=> string(4) "([)]" [2]=> int(1) } } Warning: Invalid argument supplied for foreach() in /in/8lPcf on line 21 1
Output for 5.6.8 - 5.6.28
array(1) { [0]=> array(3) { [0]=> int(314) [1]=> string(4) "([)]" [2]=> int(1) } } array(1) { [0]=> array(3) { [0]=> int(314) [1]=> string(4) "([)]" [2]=> int(1) } } Warning: Invalid argument supplied for foreach() in /in/8lPcf on line 21 1
Output for 5.5.24 - 5.5.35
array(1) { [0]=> array(3) { [0]=> int(312) [1]=> string(4) "([)]" [2]=> int(1) } } array(1) { [0]=> array(3) { [0]=> int(312) [1]=> string(4) "([)]" [2]=> int(1) } } Warning: Invalid argument supplied for foreach() in /in/8lPcf on line 21 1
Output for 5.3.0 - 5.4.45
array(1) { [0]=> array(3) { [0]=> int(311) [1]=> string(4) "([)]" [2]=> int(1) } } array(1) { [0]=> array(3) { [0]=> int(311) [1]=> string(4) "([)]" [2]=> int(1) } } Warning: Invalid argument supplied for foreach() in /in/8lPcf on line 21 1
Output for 4.4.2 - 4.4.9, 5.1.0 - 5.2.17
Parse error: syntax error, unexpected T_FUNCTION in /in/8lPcf on line 18
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.4.1, 5.0.0 - 5.0.5
Parse error: parse error, unexpected T_FUNCTION in /in/8lPcf on line 18
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error in /in/8lPcf on line 18
Process exited with code 255.