Php 关联数组,同一键的和值

Php 关联数组,同一键的和值,php,arrays,sum,associative-array,Php,Arrays,Sum,Associative Array,所以我有了这个关联数组(使用kint完成转储) d 而不是让按键“会议”重复3次。我只想用它一次,然后将3个值相加为一,得到如下结果: 会议:4534 所有其他重复的键都是一样的 是否有一个本机函数可以做到这一点?一个简单的建议: $results = array(); foreach ($budgetByEventTemp as $value) { if( ! isset($results[$value['event']]) ) { $results[$value['eve

所以我有了这个关联数组(使用kint完成转储)

d

而不是让按键“
会议
”重复3次。我只想用它一次,然后将3个值相加为一,得到如下结果:

会议:4534

所有其他重复的键都是一样的

是否有一个本机函数可以做到这一点?

一个简单的建议:

$results = array();
foreach ($budgetByEventTemp as $value)
{
  if( ! isset($results[$value['event']]) )
  {
     $results[$value['event']] = 0;
  }

  $results[$value['event']] += $value['budget'];

}

var_dump($results);
根据评论更新

您可以再次运行它们:

foreach($results as $key => $value)
{
  $structured_results[] = array('event' => $key, 'budget' => $value);
}

var_dump($structured_results);
你可以试试

$data = array(
  0 => array(
    'event' => 'Conference',
    'budget' => 3700,
  ),
  1 => array(
    'event' => 'Conference',
    'budget' => 500,
  ),
  2 => array(
    'event' => 'Showroom',
    'budget' => 1000,
  ),
  3 => array(
    'event' => 'Mission Chez client',
    'budget' => 2000,
  ),
  4 => array(
    'event' => 'Séminaire',
    'budget' => 700,
  ),
  5 => array(
    'event' => 'Livraison',
    'budget' => 4000,
  ),
  6 => array(
    'event' => 'Conference',
    'budget' => 334,
  ),
);

$sum = array_reduce($data, function ($a, $b) {
    isset($a[$b['event']]) ? $a[$b['event']]['budget'] += $b['budget'] : $a[$b['event']] = $b;  
    return $a;
});


print_r(array_values($sum));
输出

Array
(
    [0] => Array
        (
            [event] => Conference
            [budget] => 4534
        )

    [1] => Array
        (
            [event] => Showroom
            [budget] => 1000
        )

    [2] => Array
        (
            [event] => Mission Chez client
            [budget] => 2000
        )

    [3] => Array
        (
            [event] => Séminaire
            [budget] => 700
        )

    [4] => Array
        (
            [event] => Livraison
            [budget] => 4000
        )

)

此选项将对数组中所有重复索引的值进行分组和求和

此处代码:

$aValues[]=array("nametogroup",10);
$aValues[]=array("nametogroup",20);
$aValues[]=array("nametogroup2",30);
$aValues[]=array("nametogroup2",20);
echo var_dump($aValues); // array before grouping
foreach ($aValues as  $id=>$value) 
{
  $a2sum["{$value[0]}"]=$value[1] + $a2sum["{$value[0]}"];
}
echo var_dump($a2sum); //array after group and adding values
这将导致:

array
0 => 
array
  0 => string nametogroup (length=11)
  1 => int 10
1 => 
array
  0 => string nametogroup (length=11)
  1 => int 20
2 => 
array
  0 => string nametogroup2 (length=12)
  1 => int 30
3 => 
array
  0 => string nametogroup2 (length=12)
  1 => int 20

array
nametogroup => int 30
nametogroup2 => int 50

要迭代一组数据并返回一组可能更小的数据,
array\u reduce()
是一个明智的“函数”选择。下面是@Baba答案的一个细微变化,它使用了一个空合并操作符和一个更直观的变量命名约定

代码:()


谢谢你的建议,但这不会保留数组的键(事件和预算)。我不明白为什么它应该这样做,当你不想对值进行求和时?这个数组是通过json编码并发送到其他地方烹饪的,所以我需要保留相同的结构,只使用相同的键求和。它保留第二个键“预算”但不是第一个“事件”,它给出了这样一个结果:我真的需要保持相同的结构,但用相同的keyThx Baba求和值,这正是我要寻找的,但似乎值被求和了两次:1-原始数组2-数组后求和函数'Livraison'例如应该有4000,知道为什么它有8000个吗?我不能用图像。。。使用原始数组的print_r并将其添加到pastebinOriginal数组中。结果数组此无法解释的答案生成警告/错误。证明:
array
0 => 
array
  0 => string nametogroup (length=11)
  1 => int 10
1 => 
array
  0 => string nametogroup (length=11)
  1 => int 20
2 => 
array
  0 => string nametogroup2 (length=12)
  1 => int 30
3 => 
array
  0 => string nametogroup2 (length=12)
  1 => int 20

array
nametogroup => int 30
nametogroup2 => int 50
var_export(
    array_reduce(
        $data,
        function ($carry, $row) {
            $carry[$row['event']] = ($carry[$row['event']] ?? 0) + $row['budget'];
            return $carry;
        }
    )
);