在PHP中组合数组索引及其值

时间:2013-07-08 16:18:06

标签: php arrays sorting

我有一个数组,我希望将这些元素组合成一个数组。数组中的元素没有特定的顺序。我正在使用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

);

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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());

答案 2 :(得分: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所以没关系。