Nordway
26.09.2009 - 01:06
Есть некая база (ID | Team_Name), где хранятся некие команды. Всего 8 команд (не может быть больше или меньше, константа). Эта база служит для создания расписания игр между командами по принципу "каждая с каждой" без повторения (8 команд, 28 матчей, по 4 матча в день). Запрос, который 1 разом выстраивает такое расписание:
SQL |
SELECT t1.id AS team1, t2.id AS team2 FROM team AS t1, team AS t2 WHERE t1.id < t2.id; |
используя PHP код вытаскиваю ID команд и располагаю их по принципу TEAM1 - TEAM2, получается:
Цитата |
1 - 2 1 - 3 2 - 3 1 - 4 2 - 4 3 - 4 1 - 5 2 - 5 3 - 5 4 - 5 1 - 6 2 - 6 3 - 6 4 - 6 5 - 6 1 - 7 2 - 7 3 - 7 4 - 7 5 - 7 6 - 7 1 - 8 2 - 8 3 - 8 4 - 8 5 - 8 6 - 8 7 - 8 |
После эти данные делились на 7 частей и выводились в расписании. Т.о. получалось, что некоторые команды в день имели больше 1 игры.
Подскажите, как можно полученные данные разделить на 7 равных частей так, чтобы в каждой части всегда были разные ID (команды)??
НЕ правильно:
Цитата |
1 - 2 1 - 3 2 - 3 1 - 4 |
Правильно:
Цитата |
1 - 2 3 - 4 5 - 6 7 - 8 |
Заранее спасибо!:)
Спустя 15 часов, 13 минут, 2 секунды (26.09.2009 - 15:19) Michael написал(а):
Попробуй так:
PHP |
$arr=''; for ($i=1; $i<=7;$i++) { $arr[i]['spis']=''; $arr[i]['data']=''; } while ($row=mysql_fetch_array($rezult)) { $team1=$row['team1']; $team2=$row['team2']; for ($i=1; $i<=7;$i++) { if ((count($arr[i]['spis'])==4)or (strpos($arr[i]['data'],$team1)!==false)or (strpos($arr[i]['data'],$team2)!==false)) { continue; } else { $arr[i]['spis'][]=strval($team1).'-'.strval($team2); $arr[i]['data'].=strval($team1).strval($team2); break; } } } |
потом можно $arr размешать случайно - для порядка.
Спустя 1 час, 27 минут, 29 секунд (26.09.2009 - 16:46) Nordway написал(а):
Спасибо! Вывел инфу таким образом:
PHP |
print $arr[i]['spis'][0]."<br>".$arr[i]['spis'][1]."<br>".$arr[i]['spis'][2]."<br>".$arr[i]['spis'][3]."<br>"; |
результат:
Это 1 часть, а как просмотреть остальные 6 частей, где должны быть остальные данные?
Спустя 5 минут, 40 секунд (26.09.2009 - 16:52) Michael написал(а):
Цитата |
Это 1 часть, а как просмотреть остальные 6 частей, где должны быть остальные данные?smile.gif
|
Неужели нет вариантов?
Спустя 18 минут, 13 секунд (26.09.2009 - 17:10) Nordway написал(а):
Пока не могу додуматься...
$arr[i]['spis'][N]
поидеи i - это наши части (1,2,3,4,5,6,7)
['spis'] - массив со списком, где максимум 4 записи
N - отображаем нужный нам индекс массива
как вариант нада как-то прокручивать i ... =\
Спустя 1 час, 31 минута, 23 секунды (26.09.2009 - 18:42) sergeiss написал(а):
Я бы просто отсортировал так, чтобы оно всегда одинаково выдавалось, например,
SQL |
ORDER BY team1, team2 |
Для полученного результата надо один раз сделать (ручками

) соответствие между индексом строки и индексами в матрице 4х7. Чтобы определенная ячейка из одномерного массива с 28 элементами попадала в определенную ячейку двумерного массива. Всегда в одну и ту же.
Ты можешь еще в полученной матрице 4х7 перемешать строки, чтобы было больше разнообразия.
А дальше добавляй уникальные названия команд, и будет то, что тебе надо. И я думаю, это будет наиболее простой и понятный вариант.