我有一个数组:
$result = array(
'a' => 15,
'b' => 25,
'a' => 10,
'c' => 6,
'k' => 10
);
我需要相同键值的总和 即输出如:
$result = array(
'a' => 25,
'b' => 25,
'c' => 6,
'k' => 10
);
答案 0 :(得分:3)
这是不可能的,在关联数组中,键的定义是唯一的。否则它就不会很结合。
答案 1 :(得分:0)
您不能在阵列中拥有多个相同的键。如果你想在同一个数组中有多个键,你应该创建一个多维数组:
$result = array();
$result[KEY1 (or empty)] = array(
'a' => 15,
'b' => 25,
'c' => 6,
'k' => 10
);
$result[KEY2 (or empty)] = array(
'a' => 15,
'b' => 25,
'c' => 6,
'k' => 10
);
如果你想要相同键的总和,你可以使用这样的东西:
function getSum($key, $array)
{
$sum = 0;
foreach($result as $array)
{
if( array_key_exists($key, $array) && is_numeric($array[$key]) )
{
$sum += $array[$key];
}
}
return $sum;
}
使用此功能,您可以致电:
$sum = getSum('a', $result);
答案 2 :(得分:0)
为什么不使用对象?如果您添加逻辑以添加值,则不需要一些花哨的foreach()
循环来计算总和(demo)
class UniqueList {
private $data = array();
public function insert($key, $value) {
if (isSet($this->data[$key]))
$this->data[$key] += $value;
else
$this->data[$key] = $value;
}
public function getAll() {
return $this->data;
}
}
$result = new UniqueList();
$result->insert('a', 5);
$result->insert('b', 15);
$result->insert('c', 25);
$result->insert('a', 23);