【问题标题】:Sum of similar elements in 2D associative array - PHP二维关联数组中相似元素的总和 - PHP
【发布时间】:2012-08-28 17:39:32
【问题描述】:

我有一个如下所示的数组

Array (
        [0]=> Array
                (
                   [employee_num]  =>1009
                   [employee_name] =>Jane Doe
                   [amount]        =>4500.00
                )
        [1]=> Array
                (
                   [employee_num]  =>1009
                   [employee_name] =>Jane Doe
                   [amount]        =>2500.00
                )
        [2]=> Array
                (
                   [employee_num]  =>1033
                   [employee_name] =>Test User
                   [amount]        =>3455.50
                )
        [3]=> Array
                (
                   [employee_num]  =>1009
                   [employee_name] =>Jane Doe
                   [amount]        =>5500.00
                )
        [4]=> Array
                (
                   [employee_num]  =>1033
                   [employee_name] =>Test User
                   [amount]        =>7500.00
                )
     )

我想要的是一个如下的数组: (每个用户一个条目,他们的金额值的总和。)我知道我必须使用 for-each,但不能真正理解如何合并 [employee_num] 和 [employee_name] 的条目.我事先不知道数组中相似条目的数量或它们的索引。

Array (
        [0]=> Array
                (
                   [employee_num]  =>1009
                   [employee_name] =>Jane Doe
                   [amount]        =>12500.00
                )
        [1]=> Array
                (
                   [employee_num]  =>1033
                   [employee_name] =>Test User
                   [amount]        =>10955.50
                )
      )

我该怎么做?任何人都可以帮忙吗?谢谢。

【问题讨论】:

    标签: php multidimensional-array foreach associative-array


    【解决方案1】:
    function sumAmount($data)
    {
        $rst=array();
        foreach($data as $info)
        {
            if(!isset($rst[$info["employee_num"]]))
                $rst[$info["employee_num"]]=$info;
            else
                $rst[$info["employee_num"]]["amount"]+=$info["amount"];
        }
        return array_values($rst);
    }
    

    【讨论】:

    • 工作就像一个魅力。谢谢:)
    【解决方案2】:

    假设 $array 是原始数组:

    $outputArray = array();
    foreach ($array as $employeeArray) {
        $outputArray[$employeeArray['employee_name']]['employee_num'] = $employeeArray['employee_num'];
        $outputArray[$employeeArray['employee_name']]['employee_name'] = $employeeArray['employee_name'];
        $outputArray[$employeeArray['employee_name']]['amount'] += $employeeArray['amount'];
    }
    print_r($outputArray);
    

    $outputArray 的键是员工的姓名。如果您想通过employee_num 进行匹配,只需使用$outputArray[$employeeArray['employee_num']] 而不是$outputArray[$employeeArray['employee_name']]

    【讨论】:

    • 我想获取每个用户的金额总和,但您的代码只是获取每个用户的最后一个金额条目。
    • @ThiliniIW 糟糕,我对我的解决方案进行了编辑。查看$outputArray[$employeeArray['employee_name']]['amount'] += $employeeArray['amount']; 行。我使用+= 而不是=
    猜你喜欢
    • 2017-03-12
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多