2013-07-08 3 views
-1

하나의 배열로 결합하고자하는 요소를 가진 배열이 있습니다. 배열의 요소는 특별한 순서가 아닙니다. PHP를 사용하고 있습니다.배열 인덱스와 그 값을 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 

); 
+5

PHP 배열에서 동일한 키에 둘 이상의 값을 사용할 수 없습니다. 그 "입력"은 어디에 있습니까? – Dogbert

+0

PHP에서 입력 배열을 사용할 수 없습니다. 기존 키 *에 대한 할당은 이전 값보다 우선합니다. 당신의 의견은 실제로 어떻게 생겼습니까? – Sammitch

+0

어째서 배열을 얻었습니까? 그럴 수 없습니다 – Baba

답변

2

는 u는 하나 개의 배열에 동일한 키를 가질 수 없습니다 말했다 무엇 U가 할 수있는 것은 :

//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 
+0

완벽! 내가 찾고 있었던 바로는 : D –

+0

내 질문에 실제로 대답 해 주셔서 감사합니다. 저의 실수로 그것을 부 풀기보다는. –

+0

np, 이전 답변으로 복원해야합니까? – yaron

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()); 
+0

매 사이클마다'$ result'를 반환해야합니다. 그렇지 않으면 다음 사이클로 넘어 가지 않습니다. [그것을 시도 했습니까?] (http://sandbox.onlinephpfunctions.com/code/8c51b6a7b08f23ba0682ac2f4aa54c082f608e45) [이 하나는 작동합니다.] (http://sandbox.onlinephpfunctions.com/code/24b5aad6182fefa7803dc4c442f94400d5effb1c) – Rudie

+0

@ Rudie thanks, updated 내 대답은 당신 upvoted :) – Orangepill

+0

내가 array_reduce() 아이디어를 훔 쳤어 =) 그래서 모든 크레딧. – Rudie

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 그래서 괜찮습니다.

관련 문제