-1

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

多くの人が言ったように、1つの配列に同じキーを持つことはできません。できることは次のとおりです。

//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 に答える