2016-02-24 300 views
0

這是我的數組:PHP陣列組和總和

Array ([1] => Array ([great] => 5) [2] => Array ([great] => 3) [4] => Array ([bad] => 5) [5] => Array ([calling] => 4) [6] => Array ([great] => 3) [2] => Array ([bad] => 3)) 

我想這一點,同樣的名字的總和:

很大:11
不好:8
通話:4

也可以從最高到最低排序。

任何幫助?

+0

這並不像你全陣列,它缺少數組[0]。 – Here2Help

+1

請提供完整,正確的數組,以及您嘗試過的內容。你的數組有幾個問題使得它清楚這不是你的* actual *數組。 –

+1

如果您發佈的完整代碼,如果該數組來自一個數據庫,你可以做到這一點直接在SQL查詢 – Asur

回答

1

你必須遍歷每個元素:

  • 如果總和數組中沒有鑰匙,創建密鑰
  • 否則將號碼添加到先前的總和
<?php 

$array = array(
    1 => array('great' => 5), 
    2 => array('great' => 3), 
    4 => array('bad' => 5), 
    5 => array('calling' => 40), 
    6 => array('great' => 3), 
    6 => array('great' => 3), 
); 

$sums = array(); 

foreach ($array as $key => $values) { 
    foreach ($values as $label => $count) { 
     // Create a node in the array to store the value 
     if (!array_key_exists($label, $sums)) { 
      $sums[$label] = 0; 
     } 
     // Add the value to the corresponding node 
     $sums[$label] += $count; 
    } 
} 

// Sort the array in descending order of values 
arsort($sums); 

print_r($sums); 

foreach ($sums as $label => $count) { 
    print $label.': '.$count.' '; 
} 

arsort()用於通過遞減值的總和進行排序。

這將打印:

Array 
(
    [calling] => 40 
    [great] => 11 
    [bad] => 5 
) 
calling: 40 great: 11 bad: 5 

Result in Codepad

+0

我怎麼可以通過desc $ count命令?並感謝您的答案。 –

+0

@VladimirGlisovic我錯過了這部分的問題,我更新了我的答案。 –

+0

再次感謝你,你真的幫我。 –