Laravel-集合,加起来的唯一值出现在两列中

时间:2019-12-15 04:15:03

标签: php laravel

假设我有以下PHP代码:

$data = [
  [
    'home' => 'Red',
    'away' => 'Blue'
  ],
  [
    'home' => 'Orange',
    'away' => 'Blue'
  ],
  [
    'home' => 'Cyan',
    'away' => 'Blue'
  ],
  [
    'home' => 'Blue',
    'away' => 'Orange'
  ],
];

$games = collect($data);

我将如何使用Laravel的集合(或Eloquent)创建一个数组,在该数组中,通过计数任一列中的唯一值来输出次数。

因此,结果将是:

$results = [
 [
   'Blue': 4,
   'Orange': 2,
   'Red': 1,
   'Cyan': 1
];

1 个答案:

答案 0 :(得分:1)

首先,您需要使用flatten()方法将多维集合转换为一个维,然后需要countBy()方法对集合中值的出现进行计数。

$data = [
    [
        'home' => 'Red',
        'away' => 'Blue',
    ],
    [
        'home' => 'Orange',
        'away' => 'Blue',
    ],
    [
        'home' => 'Cyan',
        'away' => 'Blue',
    ],
    [
        'home' => 'Blue',
        'away' => 'Orange',
    ],
];

$games = collect($data)
    ->flatten()
    ->countBy()
    ->all();

更新

countBy()方法可从Laravel版本5.8获得。如果您的Laravel为< 5.8,则可以尝试以下方法:

$games = collect($data)
    ->flatten()
    ->groupBy(function ($value) {
        return $value;
    })
    ->map(function ($value) {
        return $value->count();
    })
    ->all();