Толи я матчасть не доковырял, толи не вижу элементарного, подсобите чем могете.
//assert(isCorrect('') === true);
//assert(isCorrect('()') === true);
//assert(isCorrect('{()}') === true);
//assert(isCorrect('{()}{}') === true);
//assert(isCorrect('(())') === true);
//assert(isCorrect('{({({({()})})})}') === true);
//assert(isCorrect('{(})') === false);
print_r(isCorrect('{()}'));
function isCorrect($string, $ar = '') {
//Если скобка открывающаяся заносим ее в начало массива "для сравнения"
//и вызываем фунцию для продолжения наполнения массива
if (substr($string, 0, 1) == '{' || substr($string, 0, 1) == '(') {
$ar = substr($string, 0, 1) . $ar;
isCorrect(substr($string, 1), $ar);
//в противном случае начинаем проверку соответствия
} else {
for ($i = 0; $i < strlen($ar); $i++) {
//если символы не n символ строки и массива не сооьветствуют возвращаем false
if (!(($ar[$i] == '{' && $string[$i] == '}') || ($ar[$i] == '(' && $string[$i] == ')'))) {
return false;
}
}
//ecли соответствие прошло, но в строке присутствуют символы вызывает повторно фуннкцию
if (strlen($ar) < strlen($string)) {
$string = (substr($string, strlen($ar)));
isCorrect($string);
// если соответствие прошло и в функции не осталось символов возвращаем true
} else {
return true;
}
}
}