多维数组-按键合并和加法

时间:2018-07-24 14:58:07

标签: php arrays multidimensional-array

我有以下数组:

array(
    [7.7] =>100
)

array(
    [8.0] =>500
)

array(
    [8.0] =>1000
)

array(
    [7.7] =>2000
)

我需要的是将这些数组按KEY分组并汇总值,所以我需要像这样的数组:

array(
    [7.7] =>2100
    [8.0] =>1500
)

我尝试先合并它们,但迷路了。

因此,我正在foreach循环中从数据库中获取数据:

$rate_tax = array();

foreach($pos as $position) {
    $rate_tax[$position->tax] = $position->$price;
}

我正在使用print_r($ rate_tax);

array(
    [7.7] =>2000
    [8.0] =>1000
)

所以我想念这些值的加法。

2 个答案:

答案 0 :(得分:1)

您快到了。只需对每个tax的{​​{1}}进行汇总即可,而不用重置它:

$rate_tax = array();

foreach($pos as $position) {

    // Use the ternary operator to check if $rate_tax[$position->tax] already exists and add to it or start at zero
    $rate_tax[$position->tax] = (isset($rate_tax[$position->tax]) ? $rate_tax[$position->tax] : 0) + $position->$price;
}

如果您不熟悉三元运算,请查看:

http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

https://davidwalsh.name/php-shorthand-if-else-ternary-operators

答案 1 :(得分:0)

您可以尝试类似的事情。

$result = array();

//Put all the input arrays inside an array so you can loop through it
$array = array($input1, $input2, $input3);
//$input1, 2 and 3 being your input arrays

foreach ($array as $input) {

    foreach ($input as $key => $value) {

        //Set the initial sum result to 0
        if(!isset($result[$key]))
            $result[$key] = 0;

        $result[$key] += $value;
    }
}