【问题标题】:How to get sum of array values according to some index (non-sorted)如何根据某个索引获取数组值的总和(未排序)
【发布时间】:2019-12-06 12:24:57
【问题描述】:

如果monthfull_name 在一个数组中相同,我想要monthly_rentalarc 的总和。

输入数组

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [id] => 521
                    [full_name] => Nilesh chauhan
                    [monthly_rental] => 15000
                    [arc] => 180000
                    [month] => 1
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [id] => 1549
                    [full_name] => Ritesh shah
                    [monthly_rental] => 14166.666666667
                    [arc] => 170000
                    [month] => 2
                )

            [1] => Array
                (
                    [id] => 589
                    [full_name] => Gajanan satpute
                    [monthly_rental] => 14166.666666667
                    [arc] => 170000
                    [month] => 2
                )

            [2] => Array
                (
                    [id] => 521
                    [full_name] => Nilesh chauhan
                    [monthly_rental] => 13333.333333333
                    [arc] => 160000
                    [month] => 2
                )

            [3] => Array
                (
                    [id] => 1549
                    [full_name] => Ritesh shah
                    [monthly_rental] => 11250
                    [arc] => 135000
                    [month] => 2
                )

            [4] => Array
                (
                    [id] => 521
                    [full_name] => Nilesh chauhan
                    [monthly_rental] => 7500
                    [arc] => 90000
                    [month] => 2
                )

            [5] => Array
                (
                    [id] => 1549
                    [full_name] => Ritesh shah
                    [monthly_rental] => 7000
                    [arc] => 84000
                    [month] => 2
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [id] => 1549
                    [full_name] => Ritesh shah
                    [monthly_rental] => 35833.333333333
                    [arc] => 430000
                    [month] => 3
                )

            [1] => Array
                (
                    [id] => 1549
                    [full_name] => Ritesh shah
                    [monthly_rental] => 14166.666666667
                    [arc] => 170000
                    [month] => 3
                )

            [2] => Array
                (
                    [id] => 521
                    [full_name] => Nilesh chauhan
                    [monthly_rental] => 13333.333333333
                    [arc] => 160000
                    [month] => 3
                )

            [3] => Array
                (
                    [id] => 521
                    [full_name] => Nilesh chauhan
                    [monthly_rental] => 8750
                    [arc] => 105000
                    [month] => 3
                )

            [4] => Array
                (
                    [id] => 589
                    [full_name] => Gajanan satpute
                    [monthly_rental] => 7500
                    [arc] => 90000
                    [month] => 3
                )

            [5] => Array
                (
                    [id] => 1549
                    [full_name] => Ritesh shah
                    [monthly_rental] => 6493.3333333333
                    [arc] => 77920
                    [month] => 3
                )
        )
)

第一个和第二个索引中有 6 个子数组,我想要 0,1,5 (Ritesh Shah, Month 2) 数组的总和并使它们唯一。与此相同,我有一个很长的数组列表,但如果你们中的任何人向我建议如何获取该数组的总和值,我将全部管理它们。

我想要的输出:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [id] => 521
                    [full_name] => Nilesh chauhan
                    [monthly_rental] => 15000
                    [arc] => 180000
                    [month] => 1
                )

        )
        [1] => Array
        (
            [0] => Array
                (
                    [id] => 1549
                    [full_name] => Ritesh shah
                    [monthly_rental] => 32416.66
                    [arc] => 389000
                    [month] => 2
                )

            [1] => Array
                (
                    [id] => 589
                    [full_name] => Gajanan satpute
                    [monthly_rental] => 14166.666666667
                    [arc] => 170000
                    [month] => 2
                )

            [2] => Array
                (
                    [id] => 521
                    [full_name] => Nilesh chauhan
                    [monthly_rental] => 20833.33
                    [arc] => 250000
                    [month] => 2
                )

        )
...

【问题讨论】:

  • 不,我有一个不同的名字,当我使用你建议的问题逻辑时,它给出的不是我想要的所有值的总和。
  • 请阅读How to Ask。你应该向我们展示你已经尝试过的东西,并解释这到底是什么问题。这不是代码编写服务。
  • @04FS 先生,我下半场都在解决这个问题,这不是你的想法。
  • 那么请显示你尝试了什么!否则我不知道除了假装之外我们应该如何看待这件事。

标签: php arrays multidimensional-array sum array-sum


【解决方案1】:

您可以应用此功能并检索您的预期输出:

function getCustomMonoRecords($data){

    $res = [];

    foreach($data as $m=>$ar){
        $res[$m] = [];   
        $tmp = []; 
        $i = 0;
        foreach($ar as $ind=>$rec){
            if(!array_key_exists($rec['id'],$tmp)) {
                $tmp[$rec['id']] = $i;  
                $res[$m][$i] = $rec;
                $i++;
            } else {
                $in = $tmp[$rec['id']];
                $res[$m][$in]['monthly_rental'] += $rec['monthly_rental'];
                $res[$m][$in]['arc'] += $rec['arc'];
            }
        } 
    }
    return $res;
}

Demo

或者有点不同:

function getCustomMonoRecords2($data){

    $res = [];

    foreach($data as $m=>$ar){
        $res[$m] = [];     
        foreach($ar as $ind=>$rec){ 
            if(!isset($res[$m][$rec['id']])){
                $res[$m][$rec['id']] = $rec;
            } else {
                $res[$m][$rec['id']]['monthly_rental'] += $rec['monthly_rental'];
                $res[$m][$rec['id']]['arc'] += $rec['arc'];
            } 
        } 
        $res[$m] = array_values($res[$m]);
    } 
    return $res;
}

Demo2

【讨论】:

  • 谢谢先生,这两个功能都运行良好。
猜你喜欢
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 2011-02-26
相关资源
最近更新 更多