PHP在排名板上排序用户

时间:2014-09-02 04:59:04

标签: php sorting ranking

我试图按照从最高到最低的总分数对足球选秀网站的用户进行排序。我大约要花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。因此,请集中回答指导我让我的用户有效排名,我真的需要帮助。

1 个答案:

答案 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);

这会将您的数组从最高到最低排序。

如果这确实有意义,请告诉我。