【问题标题】:How to sum same field values in multidimentional array如何对多维数组中的相同字段值求和
【发布时间】:2014-10-14 08:21:48
【问题描述】:

我不得不承认,理解表格对我来说是一个很大的挑战,所以请不要对我如此苛刻......

这是我的数组:

Array
(
    [names] => Array
        (
            [0] => Name1
            [1] => Name2
            [2] => Name1
        )

    [ids] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 1
        )

    [quantities] => Array
        (
            [0] => 255
            [1] => 2
            [2] => 467
        )

)

我想总结“quantities”,其中namesids 是相同的。

示例输出应该是:

Array
(
    [names] => Array
        (
            [0] => Name1
            [1] => Name2
        )

    [ids] => Array
        (
            [0] => 1
            [1] => 2
        )

    [quantities] => Array
        (
            [0] => 722
            [1] => 2
        )

)

我知道有一个类似“array_reduce”的函数,但不知道如何使用。

感谢您的帮助!

【问题讨论】:

  • 示例输出是?
  • 每个id对应一个唯一的名字吗?

标签: php arrays sum


【解决方案1】:

试试这个

    $result = [];
    foreach($array['ids'] as $key=>$val ){

        if(array_key_exists($val, $result)){

            $result[$val]['sum_quantity'] += $array['quantities'][$key];
        }
        else{
            $result[$val]['sum_quantity'] = $array['quantities'][$key];
            $result[$val]['name'] = $array['names'][$key];
            $result[$val]['id'] = $array['ids'][$key];
        }
    }

输出会是这样的

    Array
    (
        [1] => Array //array key = id
        (
            ['name'] => Name1,
            ['sum_quantity'] => 722,
            ['id'] => 1
        )

        [2] => Array
        (
            ['name'] => Name2,
            ['sum_quantity'] => 2,
            ['id'] => 2
        )
)

【讨论】:

    【解决方案2】:

    你可以这样做:

        $testArray['names'][0]='name1';
        $testArray['names'][1]='name2';
        $testArray['names'][2]='name1';
    
        $testArray['ids'][0]=1;
        $testArray['ids'][1]=2;
        $testArray['ids'][2]=1;
    
        $testArray['quantities'][0]=255;
        $testArray['quantities'][1]=2;
        $testArray['quantities'][2]=467;
    
        echo "<pre>";
    
        print_r($testArray);
    
        $unqArray['names']=array();
        $unqArray['ids']=array();
        $unqArray['quantities']=array();
    
        foreach($testArray['ids'] as $key=>$value)
        {
            if(!in_array($value,$unqArray['ids']))
            {
                $unqArray['names'][]=$testArray['names'][$key];
                $unqArray['ids'][]=$testArray['ids'][$key];
                $quantity=0;
                foreach($testArray['ids'] as $keyId=>$valueId)
                {
                    if($valueId==$value)
                    {
                        $quantity+=$testArray['quantities'][$keyId];
                    }
                }
                $unqArray['quantities'][]=$quantity;
            }
        }
    
        print_r($unqArray);
    
        echo "</pre>";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-08
      • 2013-02-24
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 2015-10-30
      • 2016-08-28
      • 1970-01-01
      相关资源
      最近更新 更多