一开始的思路就是判断每种括号的开闭数量是否相等,其实虽然也能实现但是搞得太复杂了;
后来查了查,只需设一个常量,左括号 +1,右括号 -1,闭合的话为0,没闭合的话不为0,
出现<0即为顺序不对。
<?php $str = '(())()'; if ($str == '(' || $str == ')') { die('未闭合'); } $arr = str_split($str); echo check($arr); function check($arr = []) { $d = 0; foreach ($arr as $k => $v) { if ($v == '(') { $d += 1; } if ($v == ')') { $d -= 1; } if ($d < 0) { break; } } return $d == 0 ? '已闭合' : '未闭合'; }