Laravel Collection从嵌套数据结构中获取唯一值

时间:2015-11-06 16:46:37

标签: php laravel collections filter laravel-5.1

我想使用Laravel 5.1 Collection's Unique方法从嵌套对象中过滤唯一ID。

给定数据结构

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

我想返回相同的数据结构,其中重复id 1已从"键1"中删除。

我想使用$unique = $collection->unique('id');,但这似乎并不像我一样适用于嵌套数据结构。

所以我想使用$ 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');

我不太清楚如何构建它。

结果结构应为:

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

如果您有数字列表,则可以使用此代码

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

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

您将获得所有唯一列表。

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

答案 2 :(得分:1)

如果你的数据结构是单层嵌套的,无论是数组还是对象,都很简单

kubectl

完成工作。