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

首先,您需要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获得。如果你的拉拉维尔< 5.8,你可以试试这个:

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

最新更新