PHP将一个数组中重复键的值求和


PHP Sum the values of duplicate keys in ONE array

我找不到一个完全相似的问题,所以在这里

给定一个数组…

print_r( $givenArray );

将输出如下:

array (
    [A] => 1
    [B] => 0
    [A] => 3
    [C] => 4
);

我需要对相同键的值求和,所以结果看起来像这样

array(
    [A] => 4
    [B] => 0
    [C] => 4
);

这怎么可能?由于

UPD(在ozthgreat的注释之后):

[0] => array( 
    [name] => array( 
        [0] => "A", 
        [1] => "B",
        [2] => "C" ) 
    [count] => array( 
        [0] => 1, 
        [1] => 0, 
        [2] => 4 ) ),
[1] => array( 
    [name] => array(
        [0] => "A", 
        [1] => "C") 
    [count] => array(
        [0] => 3, 
        [1] => 4))

'original'数组看起来是这样的…它们在更新之前的数组看起来很愚蠢,因为我尝试了array_count_valuesarray_combine,结果显示

/*
You can test with these values:
$givenArray = array(
    array(
        'name' => array('A', 'B', 'C'),
        'count' => array(1, 0, 4),
    ),
    array(
        'name' => array('A', 'C'),
        'count' => array(3, 4),
    )
);
*/
$newArray = array();
// New datas will be put in this new array.
foreach($givenArray as $nameAndCount) {
    foreach($nameAndCount['name'] as $index => $name) {
        if (!isset($newArray[$name])) {
        // Init $newArray[A] for example
            $newArray[$name] = 0;
        }
        $newArray[$name] += $nameAndCount['count'][$index];
        // Add the right 'count' to $newArray[A]
    }
}

/*
Output:
Array
(
    [A] => 4
    [B] => 0
    [C] => 8
)
*/

这个没有测试,但是试试这个:

$newArray = array();
foreach ($givenArray as $key => $value){
    // If the array key already exists in the new array
    if(array_key_exists($key,$newArray)){
        // overwrite the element, adding the looped value
        $newArray[$key] = $newArray[$key] + $value; 
    } else {
        // add the element and value to the new array
        $newArray[$key] = $value;
    }
}
var_dump($newArray);