【问题标题】:How to sum array value with specific key [duplicate]如何用特定键对数组值求和[重复]
【发布时间】:2019-09-04 14:00:28
【问题描述】:
"accounts" => array:6 [
    0 => array:2 [
      "acc_id" => 1
      "balance" => 1000.00
    ]
    1 => array:2 [
      "acc_id" => 2
      "balance" => -1500.00
    ]
    2 => array:4 [
      "acc_id" => 3
      "balance" => 5000.00
    ]
]

您好,我怎样才能正确总结所有余额?

代码

foreach ($y['accounts'] as $k) 
{
    $sum_balance = $k['balance'];           
}
$sum_balance += $sum_balance;

使用此代码,结果只会将最后一个余额本身相加。示例结果为10000.00

【问题讨论】:

  • 您将在循环的每次迭代中覆盖 $sum_balance,然后在循环后将其加倍。只需逐行浏览您的代码并积极尝试了解它在做什么

标签: php arrays


【解决方案1】:

你需要在 foreach 循环中增加 sum:

$sum_balance = 0;
foreach ($y['accounts'] as $k) 
{
    $sum_balance += $k['balance'];           
}
var_dump($sum_balance);

【讨论】:

    【解决方案2】:

    array_sum()array_column() 组合起来

    array_column()

    返回输入数组中单列的值

    array_sum()

    计算数组中值的总和

    $y = [
        'accounts' => [
            0 => [
              "acc_id" => 1,
              "balance" => 1000.00
            ],
            1 => [
              "acc_id" => 2,
              "balance" => -1500.00
            ],
            2 => [
              "acc_id" => 3,
              "balance" => 5000.00
            ]
        ]
    ];
    
    var_dump(
        array_sum(array_column($y['accounts'], 'balance'))
    );
    
    
    

    结果:float 4500

    【讨论】:

    • 您可能想为 OP 和未来的读者添加一些解释。
    • 如果你匹配OPs数据结构会更好,在这种情况下你会想要array_sum(array_column($y['accounts'], 'balance'));
    【解决方案3】:

    您的解决方案几乎是正确的,只需在循环之前初始化$sum_balance 并将其在循环内求和即可。

    $sum_balance=0;
    foreach ($y['accounts'] as $k) 
    {
        $sum_balance += $k['balance'];           
    }
    

    希望对您有所帮助,如果您需要任何帮助,请随时联系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多