如何在关联数组中添加相同的键值

时间:2014-08-27 10:52:05

标签: php

我有一个数组:

$result  = array(
  'a' => 15,
  'b' => 25,
  'a' => 10,
  'c' => 6,
  'k' => 10
);

我需要相同键值的总和 即输出如:

  $result  = array(
  'a' => 25,
  'b' => 25,
  'c' => 6,
  'k' => 10
);

3 个答案:

答案 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);