Как убрать дубликаты из коллекции в laravel?

Пользователь

от enid , в категории: PHP , год назад

Как убрать дубликаты из коллекции в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от nicolette.stoltenberg , год назад

@enid 

В Laravel есть несколько способов удаления дубликатов из коллекции. Рассмотрим несколько из них:

  1. Метод unique()


Метод unique() позволяет удалить дубликаты из коллекции на основе значения ключей.

1
2
3
4
5
$collection = collect([1, 2, 2, 3, 3, 3]);

$unique = $collection->unique();

$unique->all(); // [1, 2, 3]


  1. Метод distinct()


Метод distinct() позволяет удалить дубликаты из коллекции на основе значения полей.

1
2
3
4
5
6
7
8
9
$collection = collect([
    ['name' => 'John', 'age' => 20],
    ['name' => 'Jane', 'age' => 20],
    ['name' => 'James', 'age' => 25],
]);

$unique = $collection->unique('age');

$unique->all(); // [['name' => 'John', 'age' => 20], ['name' => 'James', 'age' => 25]]


  1. Метод groupBy() и метод keys()


Метод groupBy() позволяет группировать элементы коллекции по определенному полю, а метод keys() - получить ключи групп.

1
2
3
4
5
6
7
8
9
$collection = collect([
    ['name' => 'John', 'age' => 20],
    ['name' => 'Jane', 'age' => 20],
    ['name' => 'James', 'age' => 25],
]);

$unique = $collection->groupBy('age')->keys();

$unique->all(); // [20, 25]


  1. Метод reduce()


Метод reduce() позволяет пройтись по коллекции и с помощью функции обработки удалить дубликаты.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$collection = collect([1, 2, 2, 3, 3, 3]);

$unique = $collection->reduce(function ($carry, $item) {
    if (!in_array($item, $carry)) {
        $carry[] = $item;
    }

    return $carry;
}, []);

$unique; // [1, 2, 3]


Выберите метод, который подходит для вашей задачи.