Я создал функцию roundrobin с нуля, так как думал, что будет проще получить те же результаты, а также позволил мне использовать массивы, заполненные строками, а не числами.
Поскольку я извлекаю список имен из базы данных и добавляю в массив, я теперь могу планировать это непосредственно с помощью функции ниже. Никаких дополнительных шагов не требуется, чтобы связать номера с именами и т. Д.
Пожалуйста, не стесняйтесь попробовать, и если это сработает, оставьте комментарий.
У меня также есть версия, которая допускает двухстороннее (домой и обратно) расписание или вариант случайного выбора. Если кому-то это интересно, оставьте комментарий.
<?php
/**
* @author D.D.M. van Zelst
* @copyright 2012
*/
function scheduler($teams){
if (count($teams)%2 != 0){
array_push($teams,"bye");
}
$away = array_splice($teams,(count($teams)/2));
$home = $teams;
for ($i=0; $i < count($home)+count($away)-1; $i++){
for ($j=0; $j<count($home); $j++){
$round[$i][$j]["Home"]=$home[$j];
$round[$i][$j]["Away"]=$away[$j];
}
if(count($home)+count($away)-1 > 2){
array_unshift($away,array_shift(array_splice($home,1,1)));
array_push($home,array_pop($away));
}
}
return $round;
}
?>
Как использовать, например, создать массив вроде:
<?php $members = array(1,2,3,4); ?>
или
<?php $members = array("name1","name2","name3","name4"); ?>
затем вызовите функцию, чтобы создать расписание на основе указанного выше массива:
<?php $schedule = scheduler($members); ?>
Чтобы отобразить расписание массива, просто сделайте, как показано ниже, или в любом случае:
Этот маленький код отображает расписание в хорошем формате, но используйте его в любом случае.
<?php
foreach($schedule AS $round => $games){
echo "Round: ".($round+1)."<BR>";
foreach($games AS $play){
echo $play["Home"]." - ".$play["Away"]."<BR>";
}
echo "<BR>";
}
?>
Оставьте записку, если она сработала для вас или если вы заинтересованы в двухсторонней версии с перемешиванием.