Je suis en cours d'exécution à travers un grand vieux fart cerveau actuellement et je suis coincé sélectionner dynamiquement le prochain « match de premier tour » que les gagnants des séries ci-dessous avanceront à:Obtenir/trier élément suivant de tableau multidimensionnel dynamique
l'échelle est généré dynamiquement ci-dessus, et ce que je voudrais faire est de déterminer le prochain ID de match. J'ai cela comme un POC actuellement, mais ce n'est pas durable si une échelle de la concurrence devait courir jusqu'à 64/plus:
$ar = [
1 => [
['id' => 1,'name' => 'round1, pair 1'],
['id' => 2,'name' => 'round1, pair 2'],
['id' => 3,'name' => 'round1, pair 3'],
['id' => 4,'name' => 'round1, pair 4'],
],
2 => [
['id' => 5,'name' => 'round2, pair 1'],
['id' => 6,'name' => 'round2, pair 2'],
]
];
$cases = [0, 0, 1, 1, 2, 2];
foreach($ar as $i => $round) {
foreach($round as $_i => $r) {
echo $r['name'] . " & NEXT_MATCH_ID::> " . $ar[($i + 1)][$cases[$_i]]['id'] . "<br /> ";
}
}
est-il un moyen plus simple de réaliser ce qui précède sans Hard- par exemple des variables codées ($cases
). Essentiellement, la quantité de "correspondances/paires" est divisée par deux: 20 4
->2
->1
.
Ce qui précède génère les ID corrects, mais il n'est pas extensible ou dynamique;
round1, pair 1 & NEXT_MATCH_ID::> 5
round1, pair 2 & NEXT_MATCH_ID::> 5
round1, pair 3 & NEXT_MATCH_ID::> 6
round1, pair 4 & NEXT_MATCH_ID::> 6
round2, pair 1 & NEXT_MATCH_ID::> ...
round2, pair 2 & NEXT_MATCH_ID::> ...
//......etc etc...
Demo/ Example du code ci-dessus si nécessaire.
Remarques
- Il n'y a pas de limite sur les matchs "joueurs/équipe" et cela peut être exponentielle,
4, 6, 8, 10, 12, 14, 16, 18....32, 34...64...etc
. - Ceci n'arrivera jamais/s'appliquera au dernier tour (Grande Finale - match
1
) car il n'y a pas d'autre tour à avancer. (facilement limité parif($i == count($rounds)) {.... do not continue...
). - Il est possible que plusieurs correspondances soient exécutées simultanément, de sorte que "l'ID du prochain rond" puisse et non être
lastId + 1
.
id Prochain match peut être calculé à partir de la dernière id du tour et l'indice de paire en cours: '$ nextId = $ roundLastId + 1 + (int) floor ($ pairIndex/2); Btw. Nombre de paires doivent être (rempli à) la puissance de 2 (2,4,8,16 ...). – shudder
@shudder Ce serait presque correct! mais il pourrait y avoir plusieurs matches en cours avec différents ID comme "ID du prochain tour", d'où le POC que j'ai traversé: P – Darren
Dans ce cas, vous ne pouvez pas trouver l'ID de correspondance suivant avec l'algorithme, car il n'est pas déterministe. Vous devez d'abord le résoudre au niveau des données. Avoir le champ 'next_match' à l'intérieur de la paire, en utilisant l'ID ladder/round commun (afin de pouvoir calculer l'ID de correspondance dans le même ladder/round) ou si vous n'avez pas de base de données relationnelle. – shudder