Как средствами php подсчитать количество объектов с одинаковым классом на странице?
Предположим есть страница:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div class='somename'></div>
<div class='somename'></div>
<div class='somename'></div>
<div class='somename'></div>
<div class='somename'></div>
</body>
</html>
Как с помощью php подсчитать все элементы с классом somename
Ответы (2 шт):
Поскольку вы не уточняете задачу, то предположу, что вам нужен отдельный php-файл для подсчёта элементов. В php, для того, чтобы заняться анализом или формированием HTML потребуется DOMDocument. А для более углублённой работы, например с классами — DOMXPath.
Ваш отдельно написанный файл будет представлять из себя что-то такое:
$dom = new DomDocument();
$dom->loadHTMLFile("page.html");
$finder = new DomXPath($dom);
$classname="somename";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
print_r($nodes);
В зависимости от контекста работы вторая строка будет выглядеть как
$dom->load("page.html");
Внутри одного файла можно прочесть и самого себя. Условно говоря файл для этого назовём dom-2.php содержимое целиком:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dom-2 :)</title>
</head>
<body>
<div class='somename'>1</div>
<div class='somename'>2</div>
<div class='somename'>3</div>
<div class='somename'>4</div>
<div class='somename'>5</div>
<pre>
<?php
$dom = new DomDocument();
$dom->loadHTMLFile("dom-2.php");
$finder = new DomXPath($dom);
$classname="somename";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
print_r($nodes);
?>
</pre>
</body>
</html>
Но при этом ваша задача в текущей озвучке становится какой-то бессмысленной. Если страница формируется при помощи вашего же php, то никакой DOM не нужен, чтобы узнать количество элементов, которые мы туда сами и насовали.