Php 在Laravel中基于数组的值和和区分数组

Php 在Laravel中基于数组的值和和区分数组,php,laravel,laravel-5,laravel-4,Php,Laravel,Laravel 5,Laravel 4,我有一个数组,首先我想区分sitekey和site的基础不限于1或2 然后是站点的期初余额和期末余额之和 与所有site888一样,总余额=期初余额+期末余额 999总余额=期初余额+期末余额 "games": [ { "id": 240, "user_id": 1, "site": "888", "opening_balance": 5, "closing_balance": 6 }, {

我有一个数组,首先我想区分sitekey和site的基础不限于1或2 然后是站点的期初余额和期末余额之和 与所有site888一样,总余额=期初余额+期末余额 999总余额=期初余额+期末余额

"games": [
    {
        "id": 240,
        "user_id": 1,
        "site": "888",
        "opening_balance": 5,
        "closing_balance": 6
    },
    {
        "id": 243,
        "user_id": 1,
        "site": "999",
        "opening_balance": 3,
        "closing_balance": 4
    },
    {
        "id": 244,
        "user_id": 1,
        "site": "888",
        "opening_balance": 5,
        "closing_balance": 6
    }, 
并且想要像这样的输出 站点=>888,总余额=>22,站点=>999,总余额=>7 它可能是一根绳子

我试过的代码是:

{
    $collection = collect(Site::all())->map(function($item , $key){
                            return $item["name"];
                        });

    $record = Game::whereIn('site',$collection)->get();
    dd($record);

    /*$bySite = array();
        foreach ($record as $key => $item) {
            if(!isset($bySite[$item['site']])) {
                $bySite[$item['site']] = array();
            }
            $bySite[$item['site']][$key] = $item;
        }*/
}
在我注释的代码之后,输出是 但我不知道这是怎么回事

{
"888": {
    "0": {
        "id": 240,
        "user_id": 1,
        "site": "888",
        "opening_balance": 5,
        "closing_balance": 6
    },
   "2": {
        "id": 244,
        "user_id": 1,
        "site": "888",
        "opening_balance": 5,
        "closing_balance": 6
    },
  },
"999": {
    "1": {
        "id": 243,
        "user_id": 1,
        "site": "999",
        "opening_balance": 3,
        "closing_balance": 4,

您可以使用Laravel Collection实现这一点

$games =  [
    [
        "id" =>  240,
        "user_id" =>  1,
        "site" =>  "888",
        "opening_balance" =>  5,
        "closing_balance" =>  6
    ],
    [
        "id" =>  243,
        "user_id" =>  1,
        "site" =>  "999",
        "opening_balance" =>  3,
        "closing_balance" =>  4
    ],
    [
        "id" =>  244,
        "user_id" =>  1,
        "site" =>  "888",
        "opening_balance" =>  5,
        "closing_balance" =>  6
    ]
];

$games = collect($games);

$games = $games->groupBy('site')->map(function($game, $key){
    return [
        'site' => $key,
        'total_balance' => $game->sum('opening_balance') + $game->sum('closing_balance'),
    ];
})->values();

dd($games->toArray());
而输出将是,

array:2 [▼
    0 => array:2 [▼
        "site" => 888
        "total_balance" => 22
    ]
    1 => array:2 [▼
        "site" => 999
        "total_balance" => 7
    ]
]
代码片段:

步骤 1.foreach$collection 2.求和值并存储在数组中,如$collection->sum'opening\u balance'、$collection->sum'closing\u balance' 3.然后对变量求和 4.停止循环
5.然后$final=$final['site'].=>$最终[‘总和]

您需要在所有项目中包含总余额,还是需要按站点分组并包含总余额?您能更具体地说明您想要的输出吗?是的,请按站点分组,然后包括总余额。您能指定您期望的输出吗?请编辑并指定您的输出结构。必需=站点=>888,总余额=>22站点=>999,总余额=>7可能是字符串问题,但我需要此输出。。。。我需要所有网站的总余额888分离和999分离等111非常感谢先生你的答案是非常宝贵的。。。但我早上用另一种方法做的,不客气。如果这解决了您的问题,您可以接受答案。