2014-09-02 27 views
-1

我想按總分從高到低排序足球選秀網站的用戶。我大概需要10個小時才能完成這種工作。我已經在SO上至少有十幾個答案,閱讀並閱讀關於USORT,SORT,ARSORT,UASORT和其他排序選項的PHP手冊。我重複了我的代碼。我是PHP的一名完全新手,現在已經超過了我預定的截止日期3周。我在我的智慧結束b/c我覺得這應該是非常簡單的東西,我要麼1)缺少超簡單的東西或2)過度複雜的解決方案或我的代碼一般。PHP在排序板上排序用戶板

對於我想要實現的視覺想法,所以可以在這裏查看排名頁面:acesoccerpicks [DOT] com/standings.php。它打算根據總分從高到低排列玩家。

這是一個我自己和朋友的個人網站,所以截稿日期並不可怕,但我不想錯過任何更多的匹配缺失排名功能的b/c。

總結:除其他外,我試圖根據計算的點變量($ total_pts)對用戶進行排序,並將用戶顯示爲html表中的排名(從最高到最低)。我也想顯示用戶的排名作爲一個數字(即第一,第二,第三等)。

我的代碼可以在這裏查看:http://jsfiddle.net/Craig78/e6jmLgj7/。 (片段) 的foreach($用戶爲$用戶){// 做的東西在這裏

// 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,我唯一的目標是讓它「足夠好」,爲一羣緊密團結的朋友推出並使用和享受EPL。所以請將焦點集中在引導我讓用戶排名有效的問題上,我真的需要幫助。

回答

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

這將從最高排序到最低排列數組。

請讓我知道這是否合理。

+0

您展示原稿$用戶數組中,我可以做 $用戶=陣列( 陣列( '用戶'=> $ user_ID的, '點'=> $ total_pts) ... ) – user1785997 2014-09-02 14:36:06

+0

是。首先你必須以這種格式創建一個數組。你可以做你所提到的。 – 2014-09-03 05:43:30

+0

請參閱編輯代碼。 – 2014-09-03 05:51:42