当我们压缩到视图时,如何对从控制器获取的 JSON 数组中的数据求和(Laravel)

Posted

技术标签:

【中文标题】当我们压缩到视图时,如何对从控制器获取的 JSON 数组中的数据求和(Laravel)【英文标题】:How to sum data in array of JSON that get from controller when we compact to the view (Laravel) 【发布时间】:2018-04-06 20:03:05 【问题描述】:

我遇到了一个问题。在下面给出的 JSON 数组中:

$results = [
 
    proj_name: rental,
    act_name: income,
    amount: "1000"
,

    proj_name: rental,
    act_name: expend,
    amount: "-2000"
,

    proj_name: rental,
    act_name: initiall,
    amount: "3000"
,

    proj_name: rental,
    act_name: income,
    amount: "4000"
,

    proj_name: rental,
    act_name: expend,
    amount: "-5000"
,

    proj_name: rental,
    act_name: initial,
    amount:"6000"
,
 
    proj_name: loan,
    act_name: income,
    amount: "7000"
,

    proj_name: loan,
    act_name: expend,
    amount: "-8000"
,

    proj_name: loan,
    act_name: initial,
    amount: "9000"
,

    proj_name: loan,
    act_name: income,
    amount: "10000"
,

    proj_name: loan,
    act_name: expend,
    amount: "-11000"
,

    proj_name: loan,
    act_name: initial,
    amount:"12000"

]

我们可以看到这里有两个proj_name,分别是rentalloan

事务还进一步分为incomeexpendinitial 3 个活动。

我的问题是如何循环通过$results 数组来计算我上面列出的每种交易类型的总和。我希望输出是这样的:

|------------------|
|      rental      |
|------------------|
|income : 5000     |
|expend : -7000    |
|initial : 9000    |
|------------------|
|Sum Rental: 7000  |
|------------------|
|
|------------------|
|      loan        |
|------------------|
|income : 17000    |
|expend : -19000   |
|initial : 21000   |
|------------------|
|Sum Loan: 19000   |
|------------------|

【问题讨论】:

将 JSON 解码为一个数组,然后使用 php 的众多数组函数之一将该数组缩减为一个数字,我建议array_reduce() 请问你能实现吗?我不知道它会怎样..... 【参考方案1】:

假设 JSON 数组已被解码为 $json,以下应该可以工作。

$output = [];    

foreach ($json as $item) 
    if (!isset($output[$item->proj_name])) 
        $output[$item->proj_name] = [
            'income' => 0,
            'expend' => 0,
            'initial' => 0,
            'total' => 0
        ];
    
    $output[$item->proj_name][$item->act_name] += $item->amount;
    

foreach ($output as $type) 
    $type['total'] = $type['initial'] + $type['income'] - $type['expend'];

它可能需要一些小的调整,但这应该遍历您的 JSON 数组并通过匹配的任何项目来增加每个值。

【讨论】:

感谢您的回答,我确实实现了它,但即使我能理解您的回答的逻辑,它也不起作用......请您更清楚地弄清楚您的答案.. .... 有什么不好的?你有没有得到任何错误? 正在处理您的答案,这是我们有超过 2 个 proj_name$output 成像的修复数组,谢谢...... 我更新了代码,以编程方式将 proj_names 构建到输出数组中,看看效果是否更好。 哇.... 非常好,感谢您的跟进,incomeexpend initial 的值工作正常,但 total 的总和仍然无法为 0 . 你能不能把数组做成这样的形式:` $output = proj_name: "rental", Income: 5000, Expend: -7000, Initial: 9000, Total: 7000 , proj_name: "loan", Income: 17000, Expend: -19000, Initial: 21000, Total: 19000 `我试图改变但失败了我弄乱了数组的索引

以上是关于当我们压缩到视图时,如何对从控制器获取的 JSON 数组中的数据求和(Laravel)的主要内容,如果未能解决你的问题,请参考以下文章

如何在滚动到顶部同时添加侦听器时对从 Firestore 获取的聊天进行分页

当我们在 iOS 中使用 Twitter 登录时,如何将一个视图控制器移动到另一个视图控制器

如何在加载视图控制器之前使用来自服务器/数据库的数据来显示视图控制器

swift 2.2中api(json)没有数据时如何显示警报

当用户返回到 UITabBarController 选项卡时如何刷新表数据

ajax 返回的是json 怎么获取到