Метод matching
Метод matching класса ArrayCollection
выполняет фильтрацию коллекции на основе
объекта Criteria. Он возвращает
новый экземпляр ArrayCollection,
содержащий только те элементы, которые
соответствуют условиям, переданным
в критерии. Исходная коллекция при
этом не изменяется. Метод принимает
один обязательный параметр - объект
Criteria, который описывает
правила отбора элементов.
Синтаксис
$res = $collection->matching(Criteria $criteria);
Пример
Давайте создадим коллекцию чисел и отфильтруем только те элементы, которые больше 2:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCriteria;
class CollectionController extends AbstractController
{
public function index(): Response
{
$collection = new ArrayCollection([1, 2, 3, 4, 5]);
$criteria = Criteria::create()
->where(Criteria::expr()->gt('value', 2));
$res = $collection->matching($criteria);
return new Response(json_encode($res->toArray()));
}
}
?>
Результат выполнения кода:
{"2":3,"3":4,"4":5}
Пример
Давайте отфильтруем коллекцию строк,
оставив только элементы, содержащие
подстроку 'abc':
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCriteria;
class CollectionController extends AbstractController
{
public function index(): Response
{
$collection = new ArrayCollection(['abcde', 'article', 'user', 'hello', 'abc']);
$criteria = Criteria::create()
->where(Criteria::expr()->contains('value', 'abc'));
$res = $collection->matching($criteria);
return new Response(json_encode($res->toArray()));
}
}
?>
Результат выполнения кода:
{"0":"abcde","4":"abc"}
Пример
Давайте отсортируем коллекцию по убыванию и ограничим выборку двумя элементами:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCriteria;
class CollectionController extends AbstractController
{
public function index(): Response
{
$collection = new ArrayCollection([1, 2, 3, 4, 5]);
$criteria = Criteria::create()
->orderBy(['value' => 'DESC'])
->setMaxResults(2);
$res = $collection->matching($criteria);
return new Response(json_encode($res->toArray()));
}
}
?>
Результат выполнения кода:
{"4":5,"3":4}
Смотрите также
-
класс
ArrayCollection,
который представляет собой коллекцию элементов -
класс
Criteria,
который задаёт критерии фильтрации -
метод
filter,
который фильтрует коллекцию с помощью callback-функции -
метод
toArray,
который преобразует коллекцию в массив