Метод unique
Метод unique применяется к коллекции и возвращает новую коллекцию, содержащую только уникальные значения. При сравнении элементов используется строгое сравнение (===), поэтому значения разных типов считаются различными. Метод можно использовать как без параметров, так и с указанием ключа для сравнения.
Синтаксис
<?php
$collection->unique($key = null);
?>
Пример 1
Давайте получим уникальные значения из простого массива:
<?php
use Illuminate\Support\Collection;
$collection = collect([1, 2, 2, 3, 3, 3, 4, 5, 5]);
$res = $collection->unique();
echo $res->implode(', ');
?>
Результат выполнения кода:
"1, 2, 3, 4, 5"
Пример 2
Давайте применим метод к массиву строк с дубликатами:
<?php
use Illuminate\Support\Collection;
$collection = collect(['a', 'b', 'a', 'c', 'b', 'd']);
$res = $collection->unique();
echo $res->implode(', ');
?>
Результат выполнения кода:
"a, b, c, d"
Пример 3
Давайте используем метод для массива объектов или ассоциативных массивов с указанием ключа для сравнения:
<?php
use Illuminate\Support\Collection;
$collection = collect([
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane'],
['id' => 1, 'name' => 'John'],
['id' => 3, 'name' => 'Bob']
]);
$res = $collection->unique('id');
foreach ($res as $item) {
echo $item['id'] . ' => ' . $item['name'] . PHP_EOL;
}
?>
Результат выполнения кода:
"1 => John"
"2 => Jane"
"3 => Bob"
Пример 4
Давайте применим метод с callback-функцией для кастомного сравнения:
<?php
use Illuminate\Support\Collection;
$collection = collect([1, 2, 3, 4, 5]);
$res = $collection->unique(function ($item) {
return $item % 2;
});
echo $res->implode(', ');
?>
Результат выполнения кода:
"1, 2"
Пример 5
Давайте используем метод в реальной задаче с моделью User:
<?php
use App\Models\User;
use Illuminate\Support\Collection;
$users = User::all();
$uniqueEmails = $users->unique('email');
foreach ($uniqueEmails as $user) {
echo $user->email . PHP_EOL;
}
?>
Результат выполнения кода:
"user1@example.com"
"user2@example.com"
"user3@example.com"