【问题标题】:Laravel Collection get unique values from nested datastructureLaravel Collection 从嵌套数据结构中获取唯一值
【发布时间】:2016-02-07 21:15:11
【问题描述】:

我想使用Laravel 5.1 Collection's 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


    【解决方案1】:
    $collection = $collection->map(function ($array) {
        return collect($array)->unique('id')->all();
    });
    

    【讨论】:

      【解决方案2】:

      如果你有数字列表,那么你可以使用这个代码

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

      【讨论】:

      • 你会得到一个带有密钥的集合:Illuminate\Support\Collection {#4033 all: [0 => 1,1 => 2,2 => 4,3 => 5,4 => 3,7 => 98,12 => 6, ],}
      【解决方案3】:

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

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

      完成这项工作。

      【讨论】:

        猜你喜欢
        • 2021-05-31
        • 1970-01-01
        • 2018-03-23
        • 2016-06-13
        • 2021-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多