Подсчитайте все теги HTML на странице PHP

Я потратил время на регулярное выражение, чтобы решить эту проблему, но не имел результата. Я пытаюсь решить эту проблему с помощью PHP 5.3. Информация, например: Сколько раз повторяется страница и информация обо всех тегах на странице.

Ваш вопрос, к сожалению, едва понятен в его нынешней форме. Попробуйте обновить его и уточнить. Если вы хотите считать все HTML-теги на странице , вы можете сделать:

$HTML = <<< HTML <html> <head> <title>Some Text</title> </head> <body> <p>Hello World<br/> <img src="earth.jpg" alt="picture of earth from space"/> <p> <p>Counting Elements is easy with DOM</p> </body> </html> HTML; 

Подсчет всех DOMElements с DOM:

 $dom = new DOMDocument; $dom->loadHTML($HTML); $allElements = $dom->getElementsByTagName('*'); echo $allElements->length; 

Вышеуказанное выведет 8 , потому что в DOM имеется восемь элементов. Если вам также необходимо знать распределение элементов , вы можете сделать

 $elementDistribution = array(); foreach($allElements as $element) { if(array_key_exists($element->tagName, $elementDistribution)) { $elementDistribution[$element->tagName] += 1; } else { $elementDistribution[$element->tagName] = 1; } } print_r($elementDistribution); 

Это вернет

 Array ( [html] => 1 [head] => 1 [title] => 1 [body] => 1 [p] => 2 [br] => 1 [img] => 1 ) 

Обратите внимание, что getElementsByTagName возвращает только DOMElements . Он не учитывает закрывающие теги и не возвращает другие DOMNodes. Если вам также необходимо подсчитать закрывающие теги и другие типы узлов, вместо этого используйте XMLReader .

 $testHTML = file_get_contents('index.html'); $search = preg_match_all('/<([^\/!][a-z1-9]*)/i',$testHTML,$matches); echo '<pre>'; var_dump($matches[1]); echo '</pre>'; 

Дает вам массив всех тегов. После того, как данные находятся в массиве, вы можете использовать все стандартные функции массива PHP – например, array_count_values ​​() – для извлечения деталей, которые вы хотите … хотя вы действительно не говорите, какую информацию вы хотите использовать для html-тегов

Используя array_count_values ​​() с результатами preg_match_all ():

 echo '<pre>'; var_dump(array_count_values($matches[1])); echo '</pre>'; 

дает

 array(5) { ["html"]=> int(1) ["head"]=> int(1) ["title"]=> int(1) ["body"]=> int(1) ["h1"]=> int(2) } 

Это то, что вы хотите?

Я предлагаю вам проверить simple html dom

http://simplehtmldom.sourceforge.net/manual.htm