3v4l.org

run code in 300+ PHP versions simultaneously
<?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("([)]");

preferences:
57.47 ms | 402 KiB | 5 Q