Функция принимающая массив из HTML тегов и проверяющая его на корректность
Такая задача :
Написать функцию, которая на входе принимает массив из открывающихся или закрывающихся тегов, а возвращает результат проверки корректности: т.е. является ли принятая функцией последовательность тегов структурой корректного HTML документа.
Вот что пока имею на данный момент. Пока удалось реализовать проверку на существование тегов и на их закрытие.Буду думать как реализовать валидность корректной последовательности.
function checkIfBalanced($expression)
{
// Инициализируем стек
$stack = [];
// Инициализируем список открывающих элементов
$startSymbols = ['<html>', '<head>', '<body>'];
// Инициализируем список пар.
$pairs = ['<html></html>', '<head></head>', '<body></body>'];
// Проходимся по массиву, который передали в функцию
foreach ($expression as $value){
$curr = $value;
if (in_array($curr, $startSymbols)) {
array_push($stack, $curr);
} else { // Если элемент не входит в список открывающих, значит считаем что это закрывающий символ
$prev = array_pop($stack);
// Составляем из этих символов пару
$pair = "{$prev}{$curr}";
// Проверяем, что она входит в список $pairs. Если входит, то все правильно, двигаемся дальше; если нет,
// то это автоматически означает, что символы не сбалансированы
if (!in_array($pair, $pairs)) {
return false;
}
}
}
// Если стек оказался пустой после обхода строки, то значит все хорошо
return count($stack) === 0;
}
var_dump(checkIfBalanced(['<head></head>', '<body></body>'])); // true