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