Метод count класса Crawler
Метод count класса Crawler возвращает
количество DOM-элементов, хранящихся в объекте
Crawler. Метод не принимает параметров и
возвращает целое число. Его удобно использовать
для проверки наличия элементов на странице и для
перебора коллекции в цикле.
Класс Crawler реализует интерфейс
Countable, поэтому к нему также можно
применять функцию count языка PHP.
Синтаксис
public function count(): int
Пример
Давайте создадим объект Crawler из HTML-строки
и посчитаем количество найденных элементов:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(): Response
{
$html = '<ul><li>article 1</li><li>article 2</li><li>article 3</li></ul>';
$crawler = new Crawler($html);
$res = $crawler->filter('li')->count();
return new Response($res);
}
}
?>
Результат выполнения кода:
3
Пример
Давайте проверим, есть ли на странице элемент
с классом item, с помощью сравнения
результата метода count с нулём:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(): Response
{
$html = '<div class="item">abcde</div><div class="item">hello</div>';
$crawler = new Crawler($html);
$items = $crawler->filter('.item');
if ($items->count() > 0) {
$res = 'items found: ' . $items->count();
} else {
$res = 'no items';
}
return new Response($res);
}
}
?>
Результат выполнения кода:
"items found: 2"
Пример
Давайте переберём все найденные элементы,
используя результат метода count в цикле:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(): Response
{
$html = '<ul><li>article 1</li><li>article 2</li><li>article 3</li></ul>';
$crawler = new Crawler($html);
$items = $crawler->filter('li');
$res = [];
for ($i = 0; $i < $items->count(); $i++) {
$res[] = $items->eq($i)->text();
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"article 1, article 2, article 3"