Функция в нативном php(без использования бибилиотек), которая проверяет корректность структуры тегов html документа
Написать функцию, которая на входе принимает массив из открывающихся или закрывающихся тегов и возвращает результат корректности: т.е. является ли принятая функцией последовательность тегов структурой корректного HTML документа. Например, последовательность “<a>”, “<div>”, “</div>”, “</a>”, “<span>”, “</span>” - корректная структура, а последовательность “<a>”, “<div>”, ”</a>”- некорректная структура.
Необходимо использовать нативный php без использования библиотек.
Из идей только проверка на наличии / в массиве. Если их ровно половина элементов, то корректно, если нет-то нет. Но это не совсем то, что нужно.
$x = array('<a>', '<div>', '</div>', '</a>', '<span>', '</span>');
$n=count($x);
$comma_separated=implode(",",$x);
foreach (count_chars($comma_separated, 1) as $i => $val) {
if (chr($i)=='/'){
$m=$val;
echo "\"" , chr($i) , "\" встречается в строке $val раз(а).\n";
}
}
if ($m==$n/2){
echo "This document is valid!\n";
}
else {
echo "This document is invalid!\n";
}
Ответы (1 шт):
Автор решения: Dmitriy Kondratiuk
→ Ссылка
function check($input){
$open = array(); // Создаем масив для открывающихся тегов
foreach ($input as $item){
if (strpos($item, '/') === false){ //Проверяем или тег открывающийся
$open[] = $item; // Если открывающийся добавляем его в масив
} else{
$item_close = array_pop($open); // Если тег закрывающийся берем последний елемент масива $open
$check_tag = str_replace("/", "", $item); // Трансформируем закрывающийся тег в открывающийся
if($item_close != $check_tag){ // Проверяем совпадают ли теги
return 'This document is invalid!\n'; // Если не совпали масив не валиден
}
}
}
if(sizeof($open) == 0){ //Проверяем масив если он пуст то значит он валидный
return 'This document is valid!\n';
} else{
return 'This document is invalid!\n';
}
}
$test = array('<a>', '<div>', '</div>', '</a>');
echo check($test);