簡體   English   中英

Laravel,如何按計數對集合進行分組

[英]Laravel, how to group a collection by a count

如何使用數字對集合進行分組。 因此,我做了一個接受數字的方法,然后使用該數字對返回的集合進行分組,因此,如果我傳入4,它將被4分組。以下是數據的原始結構。

{
    'A': [{
        id: 1, 
        id: 2,
        id: 3,
        id: 4,
        id: 5,
        id: 6,
        id: 7
    }],
    'B': [{
        id: 1,
        id: 2,
        id: 3
    }],
    'C': [{
        id: 1,
        id: 2,
        id: 3,
        id: 4
    }]
}

現在,我希望它以這種方式格式化數據。

{
    'A': [{
        1: [{
            id: 1, 
            id: 2,
            id: 3,
            id: 4
        }],
        2: [{
            id: 5,
            id: 6,
            id: 7
        }]
    }],
    'B': [{
        1: {
            id: 1,
            id: 2,
            id: 3
        }
    }],
    'C': [{
        1: [{
            id: 1,
            id: 2,
            id: 3,
            id: 4
        }]
    }]
}

這是我的代碼。

public function getAllPlayers( num )
{
    $data = Player::orderBy('familyName', 'asc')
        ->join('teams', 'players.primaryClubId', '=', 'teams.clubId')
        ->select(['players.*', 'teams.teamName', 'teams.teamNickname', 'teams.teamCode'])
        ->get()
        ->unique() //remove duplicates
        ->groupBy(function($item, $key) { //group familyName that starts in same letter
            return substr($item['familyName'], 0, 1);
        });

    return $data;
}

我真的很難在laravel中解決這個問題。 順便說一句即時通訊使用5.4版本。 任何幫助將不勝感激,在此先感謝!

嘗試使用map功能,如下所示:

$data = Player::orderBy('familyName', 'asc')
    ->join('teams', 'players.primaryClubId', '=', 'teams.clubId')
    ->select(['players.*', 'teams.teamName', 'teams.teamNickname', 'teams.teamCode'])
    ->get()
    ->unique()
    ->groupBy(function($item, $key) {
        return substr($item['familyName'], 0, 1);
    })
    ->map(function ($subCollection) {
        return $subCollection->chunk(4); // put your group size
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM