2010-09-17 159 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