Метод map класса ArrayCollection
Метод map принадлежит классу ArrayCollection
и применяет переданную callback-функцию к каждому
элементу коллекции. Метод возвращает новый экземпляр
ArrayCollection с преобразованными значениями.
Исходная коллекция при этом не изменяется. Первым
параметром передаётся callback-функция, которая
принимает значение элемента и возвращает новое значение.
Синтаксис
public function map(callable $func): static
Пример
Давайте применим callback-функцию к каждому элементу коллекции и получим новую коллекцию с преобразованными значениями:
<?php
use DoctrineCommonCollectionsArrayCollection;
$collection = new ArrayCollection([1, 2, 3, 4, 5]);
$res = $collection->map(function ($value) {
return $value * 2;
});
print_r($res->toArray());
?>
Результат выполнения кода:
[2, 4, 6, 8, 10]
Пример
Давайте преобразуем строки коллекции в верхний регистр:
<?php
use DoctrineCommonCollectionsArrayCollection;
$collection = new ArrayCollection(['abcde', 'article', 'user', 'hello']);
$res = $collection->map(function ($value) {
return strtoupper($value);
});
print_r($res->toArray());
?>
Результат выполнения кода:
["ABCDE", "ARTICLE", "USER", "HELLO"]
Пример
Давайте убедимся, что исходная коллекция не изменяется
после вызова метода map:
<?php
use DoctrineCommonCollectionsArrayCollection;
$collection = new ArrayCollection([1, 2, 3, 4, 5]);
$res = $collection->map(function ($value) {
return $value + 1;
});
print_r($res->toArray());
print_r($collection->toArray());
?>
Результат выполнения кода:
[2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]
Пример
Давайте поработаем с коллекцией сущностей и преобразуем каждую сущность в строку:
<?php
namespace AppEntity;
class Article
{
private string $title;
public function __construct(string $title)
{
$this->title = $title;
}
public function getTitle(): string
{
return $this->title;
}
}
?>
Теперь применим метод map к коллекции статей:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineCommonCollectionsArrayCollection;
$collection = new ArrayCollection([
new Article('article 1'),
new Article('article 2'),
new Article('article 3')
]);
$res = $collection->map(function (Article $article) {
return $article->getTitle();
});
print_r($res->toArray());
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Смотрите также
-
класс
ArrayCollection,
который представляет собой коллекцию элементов -
метод
filter,
который фильтрует элементы коллекции -
метод
matching,
который выбирает элементы по критерию -
метод
toArray,
который преобразует коллекцию в массив