2016-10-21 124 views
1

我需要一些關於PHP數組和我遇到的問題的更多幫助。我有一個這樣的數組: -PHP陣列 - 將兩個數組合並在一起加上一個值

array(2) { 
    [0]=> 
    array(2) { 
    [0]=> 
    array(2) { 
     ["count"]=> 
     string(3) "100" 
     ["id"]=> 
     int(46) 
    } 
    [1]=> 
    array(2) { 
     ["count"]=> 
     string(3) "300" 
     ["id"]=> 
     int(53) 
    } 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    array(2) { 
     ["count"]=> 
     string(3) "200" 
     ["id"]=> 
     int(46) 
    } 
    } 
} 

不過,我想它看起來更像這是數組: -

array(2) { 
    [0]=> 
    array(2) { 
     ["count"]=> 
     string(3) "300" <--- This has been added from Array 1 and 2 
     ["id"]=> 
     int(46) 
    } 
    [1]=> 
    array(2) { 
     ["count"]=> 
     string(3) "300" 
     ["id"]=> 
     int(53) 
    } 
    } 

基本上,如果相同的ID在這兩個領域我想計數數字相加,但如果不是,則需要將其單獨放入數組中。

我已經使用了一些數組函數,例如array_merge和array_push,但我沒有想到這可以如何工作。我也開始用if語句來開發一個foreach,但我只是讓自己完全困惑。我只需要第二雙眼睛來看看這個問題,看看它可以做到。

再次感謝大家。

+0

這樣的數組是否會有用? '陣列(陣列([ 「計數」] => 300,[ 「ID」] = 46),陣列([ 「計數」] => 300,[ 「ID」] = 53))'。這可以通過自定義功能來實現。 –

+0

嗨moni_dragu,我不確定你想說什麼?這就是我試圖從兩個陣列中實現的。 –

+0

其實我試圖提出不同的數組類型,但分心。這是我所指的類型:'array('id'=>'count')',意思就是在你的樣本數組中('46'=>'300','53'=>'300')' –

回答

1

應該有這樣的工作:

$idToCountArray = array(); //temporary array to store id => countSum 
array_walk_recursive($inputArray, function($value,$key) { //walk each array in data structure 
    if(isset(value['id']) && isset($value['count'])) { 
     //we have found an entry with id and count: 
     if(!isset($idToCountArray[$value['id']])) { 
      //first count for id => create initial count 
      $idToCountArray[$value['id']] = intval($value['count']); 
     } else { 
      //n'th count for id => add count to sum 
      $idToCountArray[$value['id']] += intval($value['count']); 
     } 
    } 
}); 
//build final structure: 
$result = array(); 
foreach($idToCountArray as $id => $countSum) { 
    $result[] = array('id' => $id, 'count' => ''.$countSum); 
} 

請注意,我還沒有testet的代碼,有可能是一個更優雅/高性能的解決方案。

1

你可以使用這樣的事情:

$end_array = array(); 

function build_end_array($item, $key){ 

    global $end_array; 

    if (is_array($item)){ 

     if(isset($item["id"])){ 

      if(isset($end_array[$item["id"]])) 
       $end_array[$item["id"]] = $end_array[$item["id"]] + $item["count"]*1; 
      else 
       $end_array[$item["id"]] = $item["count"]*1; 
     } 
     else { 
      array_walk($item, 'build_end_array'); 
     } 
    } 
} 

array_walk($start_array, 'build_end_array'); 

Here is a fiddle

0

非常感謝大家。我實際上是這樣做的: -

$fullArray = array_merge($live, $archive); 

$array = array(); 
foreach($fullArray as $key=>$value) { 
    $id = $value['id']; 
    $array[$id][] = $value['count']; 
} 

$result = array(); 
foreach($array as $key=>$value) { 
    $result[] = array('id' => $key, 'count' => array_sum($value)); 
} 

return $result;