如何在多维数组中求和相同的字段值


How to sum same field values in multidimentional array

我不得不承认,理解表格对我来说是一个巨大的挑战,所以请不要对我太苛刻。。。

这是我的阵列:

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"的功能,但不知道如何使用

谢谢你的帮助!

尝试这个

    $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
        )
)

您可以这样做:

    $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>";