Функция принимающая массив из 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

Ответы (0 шт):