-1

我有一个数组,其中包含我想组合成一个数组的元素。数组中的元素没有特定的顺序。我正在使用 PHP。

这就是我的意思。

//Input - I have this
array(
  0 => array(cat => 3),
  1 => array(dog => 4),
  2 => array(bug => 1),
  3 => array(bug => 5),
  4 => array(dog => 2),
  5 => array(dog => 1)

);

//Output - I want this 
//They are an accumulation of the values above
array(
   cat => 3,
   dog => 7,
   bug => 6

);
4

3 回答 3

2

就像许多人说的那样,你不能在一个数组中拥有相同的键,你可以做的是:

//create samples
$item = array ();
$item['animal'] = 'cat';
$item['val'] = 10;

//build the array
$items = array ();
array_push ($items,$item);       
// assuming u have some items in the array now u can:
// assuming your array name is $items

$final_array = array ();

foreach ($items as $item)
{
    $final_array[$item['animal']]+=$item['val'];  
}

//the result is in $final_array
于 2013-07-08T16:26:37.817 回答
1

@Orangepill 的答案实际上对我不起作用,而且很奇怪(减少没有返回值和引用)。

这个确实有效:

$in = array(
  array('cat' => 3),
  array('dog' => 4),
  array('bug' => 1),
  array('bug' => 5),
  array('dog' => 2),
  array('dog' => 1),
);

$out = array_reduce($in, function($out, $el) {
  @$out[ key($el) ] += reset($el); // Only 1 key + val per element?
  return $out;
}, array());

var_dump($out);

@是为了抑制新键的通知。NULL + 2 = 2所以没关系。

于 2013-10-09T21:53:33.987 回答
1

您可以使用 array_reduce 和闭包(适用于 php 5.3 及更高版本)

$res = array_reduce($array, function (&$result, $val) {
      foreach ($val as $k=>$v){
           if (!isset($result[$k])) $result[$k] = 0;
           $result[$k]+= $val;
           return $result;
      }
}, array());
于 2013-07-08T16:34:33.553 回答