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

时间:2018-12-05 07:03:18

标签: php laravel laravel-5 laravel-4

我有数组,首先我想根据site(key)进行区分,并且site不限于1或2 然后是站点的期初余额和期末余额之和 像所有站点一样(888)total_balance =期初余额+期末余额 (999)total_balance =期初余额+期末余额

"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
    }, 

想要输出  (site => 888,total_balance => 22,site => 999,total_balance => 7 (可以是b字符串))

我尝试过的代码

{
    $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,

2 个答案:

答案 0 :(得分:1)

您可以使用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
    ]
]

代码段:https://implode.io/5aPGeH

答案 1 :(得分:0)

步骤 1. foreach($ collection) 2.对值求和并存储在数组中,例如($ collection-> sum('opening_balance'),($ collection-> sum('closing_balance') 3.然后对变量求和 4.停止循环 5.然后$ final = $ final ['site']。 “ =>”。 $ final ['sum'];