2012-07-02 49 views
1

我試圖根據分數分發獎品。當我提到TIE的時,我遇到了我的邏輯問題。任何人都可以給我邏輯指針處理3人或更多人之間的關係嗎?PHP邏輯 - 如何處理分數關係?

UPDATE: 的目標是這樣的 -

  1. 讓誰已經追平了人(其中只有)
  2. 知道是什麼立場的人都在
的數組。

我有幾個樣本階段,您可以瀏覽:

示例1 - 適用於0領帶

<?php 
function give_prize($a, $b) {return;} 

$prize = array(500, 250, 75); 

$user = array(
    'user1' => 650, 
    'user2' => 500, 
    'user3' => 200, 
    'user4' => 100, 
); 

$prize_count = count($prize); 

for ($i = 0; $i < $prize_count; $i++) { 
    give_prize($user[$i], $prize[$i]); 
} 

例2 - 1鐵工程(?這是個好辦法)

<?php 
for ($i = 0; $i < $prize_count; $i++) { 

    if (isset($user[$i+1])) { 
     if ($user[$i] == $user[$i++]) { 
      // My Tie breaker code 
     } 
    } 
} 

不過,我會在3或4領帶做什麼人?我是否應該遵循上述規定,並在檢查時做更多事

+1

這取決於領帶的規則。如果兩個人並列第一名,他們是否都獲得一等獎?換句話說,你會給出四個獎項而不是三個嗎?如果沒有,你們是否在每個級別的用戶中分配獎品? –

+1

我不確定你的領帶破壞者代碼試圖做什麼......它是如何打破領帶? – Trey

+0

嘿傢伙,我不是在尋找領帶破碎的代碼。我只是想找出一個很好的方法來匹配所有綁定的人。 :) – JREAM

回答

6

我會先按照評分對用戶進行分組,然後按降序對這些組進行排序。一旦完成,無論您擁有什麼規則,分配獎品都將變得更加容易。

$usersByScore = array(); 
foreach ($user as $name => $score) { 
    $usersByScore[$score][] = $name; 
} 
krsort($usersByScore); 

例如,這原來輸入$user

$user = array(
    'user1' => 500, 
    'user2' => 400, 
    'user3' => 750, 
    'user4' => 500, 
); 

$usersByScore

$usersByScore = array(
    750 => array('user3'), 
    500 => array('user1', 'user4'), 
    400 => array('user2'), 
); 

現在,只要你喜歡,你可以發出獎品。

+0

哇,實際上可能正是我試圖去的! – JREAM