2012-07-24 132 views
0

的價值我有一個數組,看起來像這樣PHP基於特定元素

Array ( 

[0] => Array 
     (
      [id] => 123 
      [count] => 1 
     ) 

    [1] => Array 
     (
      [id] => 123 
      [count] => 3 
     ) 

    [2] => Array 
     (
      [id] => 513 
      [count] => 0 
     ) 
    [3] => Array 
     (
      [id] => 561 
      [count] => 1 
     ) 
    [4] => Array 
     (
       [id] => 613 
       [count] => 7 
     ) 

) 

我想要做的就是創建一個新的數組什麼組合陣列,即總計其中ID值相同的次數。因此,例如,新陣列看起來像這樣:

Array ( 

[0] => Array 
     (
      [id] => 123 
      [count] => 4 
     ) 

    [1] => Array 
     (
      [id] => 513 
      [count] => 0 
     ) 
    [2] => Array 
     (
      [id] => 561 
      [count] => 1 
     ) 
    [3] => Array 
     (
       [id] => 613 
       [count] => 7 
     ) 

) 

有人會知道一個很好的方法來做到這一點嗎?

謝謝!

+0

只是迭代並創建一個新的數組,如果id與先前的id相同(保存)並添加計數,但我覺得必須有更好的方法 – dzm 2012-07-24 20:46:48

回答

0

短而簡單:

$new_array = array(); 

foreach($data_array as $value) { 
    if(array_key_exists($value['id'], $new_array)) { 
     $new_array[$value['id']] += $value['count']; 
    } else { 
     $new_array[$value['id']] = $value['count']; 
    } 
} 

echo print_r($new_array,true); 

我做了id => value,因爲似乎沒有需要另一個陣列數據時id可以b e用作數組的鍵。

0

任何理由,你爲什麼不能做的id => count

+0

嗯,實際數組中有更多的值 – dzm 2012-07-24 20:46:09

0

一個關聯數組,你可以用下面的函數做到這一點(我沒有測試的代碼,但它應該工作):

function get_count_array($arr) { 
    $new_array = array(); 

    foreach($arr as $item) { 
     $found = false; 

     //loop through all the current new items to check if we already have it 
     for($i = 0; $i < count($new_array); $i++) { 
      //do we have it? 
      if($new_array[$i]['id'] == $item['id']) { 
       $new_array[$i]['count'] += 1; 
       $found = true; 

       break; 
      } 
     } 

     if(!$found) { 
      $new_array[] = array('id' => $item['id'], 'count' => 0); 
     } 
    } 

    return $new_array; 
}