【问题标题】:PHP Sum keys in multidimensional array that match another key与另一个键匹配的多维数组中的PHP求和键
【发布时间】:2014-02-21 02:25:29
【问题描述】:

我有一个多维数组,我需要将一些数据相加。

我的数组看起来像这样(我为示例裁剪了更多数据):

Array
(
    [0] => Array
        (
            [date] => 20-02-2014
            [tool] => mystuff1
            [usage] => 447
            [minutes] => 6705
        )

    [1] => Array
        (
            [date] => 20-02-2014
            [tool] => mystuff2
            [usage] => 20
            [minutes] => 1200
        )

会有多个子数组具有 tool=mystuff1,我想为所有具有 mystuff1 的子数组添加“分钟”键。最终我想对 mystuff2 做同样的事情(除了那些将要完成的之外,还有其他的“工具”键。)

我尝试了我在此站点上找到的几个示例,但它们似乎都是基于 1 个键名称的总和,即“分钟”,但当“工具”也匹配时,我找不到任何可以对“分钟”求和的地方。

【问题讨论】:

    标签: php arrays multidimensional-array sum


    【解决方案1】:

    您可以遍历您的数组并将分钟值添加到输出数组的数组键

    $output = array();
    
    foreach($your_array as $current) {
        // create the array key if it doesn't exist already
        if(!array_key_exists($current['tool'], $output))
            $output[$current['tool']] = 0;
    
        // add minutes to the current tool total
        $output[$current['tool']] += $current['minutes'];
    }
    

    这样你可以期待这样的结果:

    Array
    (
        [mystuff1] => 6705
        [mystuff2] => 1200
    )
    

    【讨论】:

    • 效果很好。不过有一件事,如果我有类似的设置但想从彼此中减去值,我不会使用 -= 而不是 +=?如果我现在这样做,我会得到一个负数而不是正确的结果。例如: += 我得到 13410 和 -= 我得到 -13410
    • 正确的结果是什么意思?如果我从零中删除一个数字,我希望它是负数......
    • 好吧,假设其中一个的值为 6500,另一个的值为 500。如果我 += 他们现在是 7000。出于某种原因,如果我 -= 它显示 -7000。我预计 6000 因为 6500-500=6000。我是否误解了该代码实际上在做什么?
    • 否-您的第一个示例是将两个值相加,第二个示例是将两个值相减(循环每次都会执行相同的运算符)-您如何区分需要添加或减去的值,并且将-500 作为您的价值观之一是不可接受的吗? (6500 + -500 = 6000)
    • 好的,明白了。感谢您的代码。它非常适合第一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2012-09-02
    • 1970-01-01
    • 2021-06-18
    • 2021-03-30
    相关资源
    最近更新 更多