Php 在Laravel中基于数组的值和和区分数组
我有一个数组,首先我想区分sitekey和site的基础不限于1或2 然后是站点的期初余额和期末余额之和 与所有site888一样,总余额=期初余额+期末余额 999总余额=期初余额+期末余额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 }, {
"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非常感谢先生你的答案是非常宝贵的。。。但我早上用另一种方法做的,不客气。如果这解决了您的问题,您可以接受答案。