【问题标题】:Laravel - Collection, add up unique value appears in two columnsLaravel - 集合,加起来唯一值出现在两列
【发布时间】:2019-12-15 04:15:03
【问题描述】:

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

【问题讨论】:

    标签: php laravel


    【解决方案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();
    

    【讨论】:

    • BadMethodCallException 方法 countBy 不存在 @Wahyu Kristianto
    • Laravel 版本? countBy 可从5.8 获得
    • Laravel 6. 谢谢。
    猜你喜欢
    • 2012-08-27
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多