Laravel Collection get unique values from nested datastructure

怎甘沉沦 提交于 2020-12-01 12:10:09

问题


I want to use Laravel 5.1 Collection's Unique method to filter unique IDs from nested objects.

Given the data structure

{
  "key1": [
    {"id": 1},
    {"id": 1}
  ],
  "key2": [
    {"id": 1},
    {"id": 2}
  ]
}

I want to return the same datastructure with duplicate id 1 removed from "key 1".

I wanted to use $unique = $collection->unique('id');, but this doesn't seem to apply to a nested datastructure as I have.

So I thought to use $collection

    $input = $request->all();

    $collection = collect($input);

    $collection->each(function($obj, $key) {
        //$key is "key1", "key2"
        //obj is the associated array of objects containing IDs
    })->unique('id');

I don't quite know how to structure this.

The result structure should be:

{
  "key1": [
    {"id": 1}
  ],
  "key2": [
    {"id": 1},
    {"id": 2}
  ]
}

回答1:


$collection = $collection->map(function ($array) {
    return collect($array)->unique('id')->all();
});



回答2:


if you have numeric List then you can use this code

$dataList = [1,2,4,5,3,2,1,98,1,2,4,5,6];

$dataList  = collect( $dataList )->unique();

you will get all the unique list.

[1,2,4,5,3,98,6]


来源:https://stackoverflow.com/questions/33571628/laravel-collection-get-unique-values-from-nested-datastructure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!