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

问题描述 投票:0回答:5

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

给定数据结构

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

我想返回相同的数据结构,并从“key 1”中删除重复的

id 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}
  ]
}
php laravel collections filter laravel-5.1
5个回答
31
投票
$collection = $collection->map(function ($array) {
    return collect($array)->unique('id')->all();
});

10
投票

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

$unique = $collection->unique('key')

完成工作。


3
投票

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

$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]

0
投票

假设我正确理解你的问题并且你只是尝试使用最里面的值作为你的唯一参考,这也应该有效

$unique = $collection->unique('key.id')

0
投票

您也可以尝试以下方法。

$unique = collect($input)->unique('*.id');
© www.soinside.com 2019 - 2024. All rights reserved.