How to remove duplicates in collection?

38,418

Solution 1

$unique = $collection->unique();

Solution 2

$collection = collect([
    ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
    ['name' => 'iPhone 5', 'brand' => 'Apple', 'type' => 'phone'],
    ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
    ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
    ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
]);

Then let's say you want the brand to be unique, in this case you should only get two brands 'Apple', and 'Samsung'

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

$unique->values()->all();
/*
    [
        ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
        ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
    ]
*/

This is taken from https://laravel.com/docs/master/collections#method-unique

Share:
38,418
Blablacar
Author by

Blablacar

Updated on January 22, 2021

Comments

  • Blablacar
    Blablacar over 3 years

    I have collection in Laravel:

    Collection {#450 ▼
      #items: array:2 [▼
        0 => Announcement {#533 ▶}
        1 => Announcement {#553 ▶}
      ]
    }
    

    It is the same items. How ti delete one of them?

    Full code is:

    public function announcements()
        {
    
            $announcements = $this->categories_ann->map(function ($c) {
                return $c->announcements->map(function ($a) {
                    $a->subsribed = true;
    
                    return $a;
                });
            });
    
            $flattened = $announcements->groupBy("id")->flatten();
    
            return $flattened;
        }