Метод intersect
Метод intersect применяется к коллекции и возвращает новую коллекцию,
содержащую только те элементы, которые присутствуют в переданной коллекции
или массиве. Метод сравнивает значения элементов, а не ключи.
Первым и единственным параметром передаётся коллекция или массив,
с которыми нужно сравнить исходную коллекцию.
Синтаксис
<?php
$collection->intersect($items);
?>
Пример
Давайте найдём пересечение двух коллекций:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([1, 2, 3, 4, 5]);
$items = new Collection([3, 4, 5, 6, 7]);
$res = $collection->intersect($items);
echo $res;
?>
Результат выполнения кода:
[3, 4, 5]
Пример
Метод intersect также работает с ассоциативными массивами.
В этом случае пересечение происходит по значениям:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([
'a' => 'article',
'b' => 'user',
'c' => 'category'
]);
$items = new Collection([
'x' => 'user',
'y' => 'category',
'z' => 'post'
]);
$res = $collection->intersect($items);
echo $res;
?>
Результат выполнения кода:
{"b":"user","c":"category"}
Пример
Метод intersect может принимать массив в качестве аргумента:
<?php
use Illuminate\Support\Collection;
$collection = new Collection(['a', 'b', 'c', 'd', 'e']);
$items = ['b', 'd', 'f'];
$res = $collection->intersect($items);
echo $res;
?>
Результат выполнения кода:
["b","d"]
Пример
Важно отметить, что метод intersect сохраняет ключи
из исходной коллекции:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([
'first' => 1,
'second' => 2,
'third' => 3,
'fourth' => 4,
'fifth' => 5
]);
$items = [2, 4, 6];
$res = $collection->intersect($items);
echo $res;
?>
Результат выполнения кода:
{"second":2,"fourth":4}
Пример
Метод intersect можно использовать для сравнения коллекций
с объектами:
<?php
use Illuminate\Support\Collection;
class User
{
public $name;
public function __construct($name)
{
$this->name = $name;
}
}
$collection = new Collection([
new User('John'),
new User('Jane'),
new User('Bob')
]);
$items = new Collection([
new User('Jane'),
new User('Bob'),
new User('Alice')
]);
$res = $collection->intersect($items);
echo json_encode($res);
?>
Результат выполнения кода:
"[{"name":"Jane"},{"name":"Bob"}]"