2010-09-17 115 views
1

如果有人願意幫忙,我需要一點幫助。循環訪問數組和總和值

我有一個數組,其中包含我想要循環訪問的值,如果任何「user_id值」相同,則總計重複用戶標識的「max_score」值。

 
Array 
(
    [0] => Array 
     (
      [user_id] => 2 
      [max_score] => 10081 
     ) 

    [1] => Array 
     (
      [user_id] => 1 
      [max_score] => 8774 
     ) 

    [2] => Array 
     (
      [user_id] => 2 
      [max_score] => 5477 
     ) 

    [3] => Array 
     (
      [user_id] => 3 
      [max_score] => 5267 
     ) 

    [4] => Array 
     (
      [user_id] => 1 
      [max_score] => 5010 
     ) 
) 

有人會知道如何做到這一點嗎?

非常感謝。

回答

1

您需要第二個數組與用戶ID作爲關鍵。你可以這樣做:

$scoresums = array(); 
foreach ($yourarray AS $user_score) { 
    if (!isset($scoresums[$user_score['user_id']])) $scoresums[$user_score['user_id']] = 0; 
    $scoresums[$user_score['user_id']] += $user_score['max_score']; 
} 

第三行將阻止PHP投擲通知。

+0

-1這會發出通知。 – NikiC 2010-09-17 18:30:31

+0

你可以通過添加「if(!isset($ scoresums [$ user_score ['user_id']]))$ scoresums [$ user_score ['user_id']] = 0;在循環的第一行。 – Thomas 2010-09-17 18:36:30

+1

哇 - 你們絕對是驚人的,出色的工作,謝謝。現在我有我的總分數,是否有按特定降序排列特定鍵的價值? – Sibbels 2010-09-19 14:34:47

4
$totals = array(); 
foreach ($your_array_values as $v) { 
    $id = $v['user_id']; 
    if (isset($totals[$id])) { 
     $totals[$id] += $v['max_score']; 
    } else { 
     $totals[$id] = $v['max_score']; 
    } 
} 
+0

如果你糾正for循環(這是一個foreach循環),並堅持一些編碼標準,你會得到我的投票。 – NikiC 2010-09-17 18:32:46