我找不到一个完全相似的问题,所以在这里
给定一个数组…
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_values
和array_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);