<?php
$competitors = [1, 2, 3, 4, 5 , 6, 7, 8];
$rounds = log( count( $competitors ), 2 ) + 1;
// round one
for( $i = 0; $i < log( count( $competitors ), 2 ); $i++ )
{
$seeded = array( );
foreach( $competitors as $competitor )
{
$splice = pow( 2, $i );
$seeded = array_merge( $seeded, array_splice( $competitors, 0, $splice ) );
$seeded = array_merge( $seeded, array_splice( $competitors, -$splice ) );
}
$competitors = $seeded;
}
$events = array_chunk( $seeded, 2 );
if( $rounds > 2 )
{
$round_index = count( $events );
// second round
for( $i = 0; $i < count( $competitors ) / 2; $i++ )
{
array_push( $events, array(
array( 'from_event_index' => $i, 'from_event_rank' => 1 ), // rank 1 = winner
array( 'from_event_index' => ++$i, 'from_event_rank' => 1 )
) );
}
$round_matchups = array( );
for( $i = 0; $i < count( $competitors ) / 2; $i++ )
{
array_push( $round_matchups, array(
array( 'from_event_index' => $i, 'from_event_rank' => 2 ), // rank 2 = loser
array( 'from_event_index' => ++$i, 'from_event_rank' => 2 )
) );
}
$events = array_merge( $events, $round_matchups );
for( $i = 0; $i < count( $round_matchups ); $i++ )
{
array_push( $events, array(
array( 'from_event_index' => $i + count( $competitors ) / 2, 'from_event_rank' => 2 ),
array( 'from_event_index' => $i + count( $competitors ) / 2 + count( $competitors ) / 2 / 2, 'from_event_rank' => 1 )
) );
}
}
if( $rounds > 3 )
{
// subsequent rounds
for( $i = 0; $i < $rounds - 3; $i++ )
{
$round_events = pow( 2, $rounds - 3 - $i );
$total_events = count( $events );
for( $j = 0; $j < $round_events; $j++ )
{
array_push( $events, array(
array( 'from_event_index' => $j + $round_index, 'from_event_rank' => 1 ),
array( 'from_event_index' => ++$j + $round_index, 'from_event_rank' => 1 )
) );
}
for( $j = 0; $j < $round_events; $j++ )
{
array_push( $events, array(
array( 'from_event_index' => $j + $round_index + $round_events * 2, 'from_event_rank' => 1 ),
array( 'from_event_index' => ++$j + $round_index + $round_events * 2, 'from_event_rank' => 1 )
) );
}
for( $j = 0; $j < $round_events / 2; $j++ )
{
array_push( $events, array(
array( 'from_event_index' => $j + $total_events, 'from_event_rank' => 2 ),
array( 'from_event_index' => $j + $total_events + $round_events / 2, 'from_event_rank' => 1 )
) );
}
$round_index = $total_events;
}
}
if( $rounds > 1 )
{
// finals
array_push( $events, array(
array( 'from_event_index' => count( $events ) - 3, 'from_event_rank' => 1 ),
array( 'from_event_index' => count( $events ) - 1, 'from_event_rank' => 1 )
) );
}
var_dump($events);
- Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
- array(14) {
[0]=>
array(2) {
[0]=>
int(1)
[1]=>
int(8)
}
[1]=>
array(2) {
[0]=>
int(4)
[1]=>
int(5)
}
[2]=>
array(2) {
[0]=>
int(2)
[1]=>
int(7)
}
[3]=>
array(2) {
[0]=>
int(3)
[1]=>
int(6)
}
[4]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(0)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
int(1)
["from_event_rank"]=>
int(1)
}
}
[5]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(2)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
int(3)
["from_event_rank"]=>
int(1)
}
}
[6]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(0)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
int(1)
["from_event_rank"]=>
int(2)
}
}
[7]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(2)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
int(3)
["from_event_rank"]=>
int(2)
}
}
[8]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(4)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
int(6)
["from_event_rank"]=>
int(1)
}
}
[9]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(5)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
int(7)
["from_event_rank"]=>
int(1)
}
}
[10]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(4)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
int(5)
["from_event_rank"]=>
int(1)
}
}
[11]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
float(8)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
float(9)
["from_event_rank"]=>
int(1)
}
}
[12]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(10)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
float(11)
["from_event_rank"]=>
int(1)
}
}
[13]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(10)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
int(12)
["from_event_rank"]=>
int(1)
}
}
}
- Output for 8.3.5
- Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
array(14) {
[0]=>
array(2) {
[0]=>
int(1)
[1]=>
int(8)
}
[1]=>
array(2) {
[0]=>
int(4)
[1]=>
int(5)
}
[2]=>
array(2) {
[0]=>
int(2)
[1]=>
int(7)
}
[3]=>
array(2) {
[0]=>
int(3)
[1]=>
int(6)
}
[4]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(0)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
int(1)
["from_event_rank"]=>
int(1)
}
}
[5]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(2)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
int(3)
["from_event_rank"]=>
int(1)
}
}
[6]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(0)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
int(1)
["from_event_rank"]=>
int(2)
}
}
[7]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(2)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
int(3)
["from_event_rank"]=>
int(2)
}
}
[8]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(4)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
int(6)
["from_event_rank"]=>
int(1)
}
}
[9]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(5)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
int(7)
["from_event_rank"]=>
int(1)
}
}
[10]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(4)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
int(5)
["from_event_rank"]=>
int(1)
}
}
[11]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
float(8)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
float(9)
["from_event_rank"]=>
int(1)
}
}
[12]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(10)
["from_event_rank"]=>
int(2)
}
[1]=>
array(2) {
["from_event_index"]=>
float(11)
["from_event_rank"]=>
int(1)
}
}
[13]=>
array(2) {
[0]=>
array(2) {
["from_event_index"]=>
int(10)
["from_event_rank"]=>
int(1)
}
[1]=>
array(2) {
["from_event_index"]=>
int(12)
["from_event_rank"]=>
int(1)
}
}
}
preferences:
170.09 ms | 409 KiB | 173 Q