我试图按照从最高到最低的总分数对足球选秀网站的用户进行排序。我大约要花10个小时试图让这种方式起作用。我已经在SO上至少走了十几个答案,阅读并阅读了关于USORT,SORT,ARSORT,UASORT和其他排序选项的php手册。我一遍又一遍地看着我的代码。我是PHP的新手,现在已经过了我预定的截止日期3周。我在我的智慧结束b / c我觉得这应该是非常简单的事情我要么1)缺少一些超级简单的东西或2)过于复杂的解决方案或我的代码一般。
对于我想要完成的视觉概念,可以在这里查看排名页面:acesoccerpicks [DOT] com / standings.php。它旨在根据从最高到最低的总分数对玩家进行排名。
这是一个供我自己和朋友使用的个人网站,所以最后期限并不严重,但我不想错过任何更多匹配缺失排名功能的b / c。
总结:除其他外,我试图根据计算的点变量($ total_pts)对用户进行排序,并在html表中将用户显示为排名(从最高到最低)。我还希望将用户的位置排名显示为数字(即第1,第2,第3等)。
我的代码可在此处查看:http://jsfiddle.net/Craig78/e6jmLgj7/。 (片段) foreach($ users as $ user){ //在这里做点什么
// Calculate total points score
$total_pts = (($cnt_winner * $ct) + ($cnt_score * $cs)); /* + (($champ IF AFTER FINAL WEEK) + ($pwt * # of PERFECT WEEKS on TEAMS) + ($pws * # of PERFECT WEEKS on SCORES) + ($cl * # of weeks as LEADER after 3 consec weeks) - ($cb * # of weeks in the bottom after 3 consecutive weeks) ) */
$ranked_users[$standings_userid] = $total_pts;
}
function compare($a, $b) {
if ($a == $b) {
return 0;
}
return ($b < $a) ? -1 : 1;
}
// sort users
usort($ranked_users, 'compare');
foreach ($ranked_users as $ranked_user) {
print_r($ranked_users);
echo $ranked_user;
// TODO: DETERMINE streaks , if any
echo '<tr>';
echo '<td>' . $user['rank'] . '</td>';
if (isset($_SESSION['user_id'])) {
echo '<td><a href="/team_profile.php?user_id=' . $standings_userid . '?user_team=' . mysqli_real_escape_string($user_team) . '" rel="" title="View ' . $user_team . '\'s profile">' . $user_team . '</a></td>';
}
else {
echo '<td>' . $user_team . '</td>';
}
echo '<td>' . $cnt_winner . '</td>';
echo '<td>' . $cnt_score . '</td>';
echo '<td>(' . $champ_pts . ')</td>';
echo '<td>-</td>';
echo '<td>' . $total_pts . '</td>';
echo '</tr>';
}
我知道我可以做很多事情来改进我的代码并完全打算使用MVC返回和重构,删除mysqli用法,利用函数等。但作为新手,我使用PHP,我的唯一目标是使它足够好&#34;推出一个紧密结合的朋友群来使用和享受EPL。因此,请集中回答指导我让我的用户有效排名,我真的需要帮助。
答案 0 :(得分:1)
正如我所看到的,你要做的是获取用户列表,并使用这些点对它们进行排序。
由于你没有在问题中反映用户数组的形式,我正在复制一个我认为会反映你所拥有的内容。
您可以使用数组多重排序功能对数组进行排序,如下所示;
http://php.net/manual/en/function.array-multisort.php
而不是我的硬编码数组,你可以像这样产生相同的颜色。
//this is taken from your code. you have to create $user_name
$organized_users = array();
foreach ($users as $user) {
$total_pts = (($cnt_winner * $ct) + ($cnt_score * $cs));
$organized_users[] = array('user' => $user, 'points' => $total_pts)
}
/*
$users = array(
array('user' => 'nimeshka', 'points' => 40),
array('user' => 'abced', 'points' => 25),
array('user' => 'xxyz', 'points' => 60)
);
*/
foreach($organized_users as $s_user){
$points[] = $s_user['points'];
}
array_multisort($points, SORT_DESC, $organized_users);
echo '<pre>';
print_r($organized_users);
这会将您的数组从最高到最低排序。
如果这确实有意义,请告诉我。