用循环将每个组中的值相加 [英] Sum values in each group with a loop
问题描述
我有一个while循环可以给出以下结果:
I have a while loop that gives this result:
Userid Point
1 10
1 15
2 5
2 10
3 8
3 2
我该如何对用户标识点求和并首先输出最高的数字,像这样:
How can I sum the userid points and output with highest number first, like this:
Userid Point
1 25
2 20
3 10
是否存在 foreach ,用于或任何其他可以完成此类结果的方法?
Is there any "foreach", "for" or any other method that can accomplish such result?
代码:
include ('variables.php');
//Fetch data from matchdata table
$q = "SELECT userid, matchid, homescore, awayscore FROM predictiondata ORDER BY userid ASC";
$r = mysqli_query($mysqli, $q);
while ($row = mysqli_fetch_array($r)) {
//Define predictions
$predhome = $row['homescore'];
$predaway = $row['awayscore'];
//Fetch gameresults
$qres = "SELECT id, homescore, awayscore, bonuspoints FROM matches WHERE id = ".$row['matchid']."";
$rres = mysqli_query($mysqli, $qres);
$result = mysqli_fetch_array($rres);
$homescore = $result['homescore'];
$awayscore = $result['awayscore'];
$bonus = $result['bonuspoints'];
$id = $result['id'];
//Calculate points
if ($homescore == $predhome && $awayscore == $predaway && $homescore != '') { $result_point = $correct_score + $correct_result + $correct_number + $correct_number; }
else if ($homescore == $predhome && $awayscore != $predaway OR $homescore != $predhome && $awayscore == $predaway) { $result_point = $correct_result + $correct_number; }
else if ($predhome > $predaway && $homescore > $awayscore OR $predhome < $predaway && $homescore < $awayscore) { $result_point = $correct_result; }
else if (is_null($predhome) OR $homescore == '') { $result_point = 0; }
else { $result_point = 0; }
if ($homescore == $predhome && $awayscore == $predaway && $homescore != '') { $bonus = $bonus; }
else if (is_null($predhome) OR $homescore == '') { $bonus = 0; }
else { $bonus = 0; }
if (is_null($predhome) OR $homescore == '') { $total_point = 0; }
else { $total_point = $result_point + $bonus; }
//Calculate total round sum
$total_roundsum = $result_point + $bonus;
//echo $username.' - '.$total_roundsum.'<br />';
if($total_roundsum != 0) {
echo $row['userid']. ' - ' .$total_roundsum.'<br />';
}
}
目前,该代码仅回显结果。
variables.php包含$ correct_score + $ correct_result + $ correct_number变量。
At the moment, the code only echo's the results. The "variables.php" holds the $correct_score + $correct_result + $correct_number variables.
推荐答案
假设这两个列是关联的数组- $ users_and_points
。
Assuming the two columns are an associated array -- $users_and_points
.
$points_array = array();
foreach ( $users_and_points as $user_id => $point ) {
if( !isset( $points_array[$user_id] ) {
$points_array[$user_id] = 0;
}
$points_array[$user_id] += $point;
}
// newly associated array with calculated totals
$points_array;
更新
而是根据上面的代码
echo $row['userid']. ' - ' .$total_roundsum.'<br />';
可以替换为:
if( !isset( $points_array[$row['userid']] ) {
$points_array[$row['userid']] = 0;
}
$points_array[$row['userid']] += $total_roundsum;
print_r( $points_array );
注意:在变量lo之前设置变量同上例如, $ points_array = array();
Note: Set the variable before your loop. Example, $points_array = array();
这篇关于用循环将每个组中的值相加的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!