假设我有以下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
];
答案 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();