[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка полученных даных
Nordway
Есть некая база (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-2
3-4
5-6
7-8


Это 1 часть, а как просмотреть остальные 6 частей, где должны быть остальные данные?smile.gif

Спустя 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
Для полученного результата надо один раз сделать (ручками smile.gif) соответствие между индексом строки и индексами в матрице 4х7. Чтобы определенная ячейка из одномерного массива с 28 элементами попадала в определенную ячейку двумерного массива. Всегда в одну и ту же.
Ты можешь еще в полученной матрице 4х7 перемешать строки, чтобы было больше разнообразия.
А дальше добавляй уникальные названия команд, и будет то, что тебе надо. И я думаю, это будет наиболее простой и понятный вариант.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.