2012-06-15 4 views
0

Выполнение следующей задачи: Detect future duplicate values while iterating through MySQL results in PHP.Рассчитать общий рейтинг и рейтинг деления с помощью массивов

У меня есть запрос SQL, который производит результаты:

team_id division_id wins 
------------------------------- 
10  2    44 
9   2    42 
5   1    42 
2   1    42 
3   1    41 
11  2    40 
1   1    36 
8   2    31 
7   2    29 
12  2    24 
4   1    20 
6   1    18 

Я пытаюсь вычислить общий и дивизионного рейтинг данной команды.

Например, team_id = 1:

Overall:  7 
Divisional: 4 

Для team_id = 3:

Overall:  5 
Divisional: 3 

Для team_id = 9:

Overall:  T-2 //must indicate tie 
Divisional: 2 

Как вы можете видеть из связанного предыдущего вопроса/ответа, я могу рассчитать общий ранг просто отлично. Проблема связана с вычислением ранга дивизии (включая правильное обращение с галстуками).

Я пытался хранить результаты в многомерном массиве как $arr['wins']['division_id']['team_id'], такие как ...

44 => 2 => 10 
42 => 1 => 5 
      2 
     2 => 9 
41 => 1 => 3 
40 => 11 => 2 
... 

Но я застрял о том, как перебрать и получить мои две соответствующие ряды, в а также для надлежащего обнаружения связей для каждого.

ответ

0

Попробуйте что-то вроде этого:

// Dataset as defined on question 
$arr = array(
array('team_id' => 10, 'division_id' => 2, 'wins' => 44), 
array('team_id' => 9, 'division_id' => 2, 'wins' => 42), 
array('team_id' => 5, 'division_id' => 1, 'wins' => 42), 
array('team_id' => 2, 'division_id' => 1, 'wins' => 42), 
array('team_id' => 3, 'division_id' => 1, 'wins' => 41), 
array('team_id' => 11, 'division_id' => 2, 'wins' => 40), 
array('team_id' => 1, 'division_id' => 1, 'wins' => 36), 
array('team_id' => 8, 'division_id' => 2, 'wins' => 31), 
array('team_id' => 7, 'division_id' => 2, 'wins' => 29), 
array('team_id' => 12, 'division_id' => 2, 'wins' => 24), 
array('team_id' => 4, 'division_id' => 1, 'wins' => 20), 
array('team_id' => 6, 'division_id' => 1, 'wins' => 18)); 


$divisionTeam = array(); 
$divisionWins = array(); 
foreach($arr as $team) { 
    $divisionTeam[$team['division_id']][] = $team['team_id']; 
    $divisionWins[$team['division_id']][] = $team['wins']; 
} 



echo "<pre>"; 
foreach (array_keys($divisionTeam) as $division_id) { 
    $rank = 0; 
    $prevWins = -1; 
    echo "DIVISION $division_id \n"; 
    foreach ($divisionTeam[$division_id] as $index => $team_id) { 

     if ($prevWins == $divisionWins[$division_id][$index]) { 
      echo $team_id . " T - " . $rank . "\n"; 
     } 
     else { 
      $rank++; 
      echo $team_id . " " . $rank . "\n"; 
     } 
     $prevWins = $divisionWins[$division_id][$index]; 

    } 
} 
echo "</pre>"; 
+0

Спасибо, но 2 вопроса: что не дает мне общий ранг по обоим разделам, и связи правильно не обработаны (только одна привязана команда «Т- «прилагается, а ранг следующей команды не увеличивается соответственно). – hannebaumsaway