Multidimensionale array doorzoeken/doorgeven

Status
Niet open voor verdere reacties.

Niellles

Gebruiker
Lid geworden
21 jun 2008
Berichten
194
Beste,

Door m'n schaakvereniging ben ik gevraagd om een website te maken die een toernooi makkelijk indeelt.
Er zijn een aantal eigenschappen van het toernooi:
- Men speelt nooit tegen iemand van z'n eigen vereniging.
- In de 3 rondes speel je nooit tegen dezelfde tegenstander.
- Je bent afwisselend zwart of wit.

PHP:
<?php
$alle_teams = mysqli_query($dbc, "SELECT * FROM `teams` WHERE tid = '".$_GET['tid']."' ORDER by RAND()");

$i = 1;
while ($a = mysqli_fetch_array($alle_teams))
{
 $team1[$i] = $a;
 
 if ($b = mysqli_fetch_array($alle_teams))
 {
     $team2[$i] = $b;
 }
 
 $i++;
}

while (IntverenigingCheck($team1,$team2))
{
    shuffle($team1);
    shuffle($team2);
}

?>

<table id="box-table-a">
<tr><th colspan="2">Voor</td><th colspan="2">Tegen</th></tr>
<tr><th>Naam</th><th>vereniging</th><th>Naam</th><th>vereniging</th></tr>


<?php
foreach ($team1 as $key => $value)
{
        echo '<tr><td>'.$team1[$key]['naam'].'</td><td>'.$team1[$key]['vereniging'].'</td><td>'.$team2[$key]['naam'].'</td><td>'.$team2[$key]['vereniging'].'</td></tr>';
}
echo '</table>';

De gebruikte functie:
PHP:
function IntverenigingCheck($team1,$team2) {

 foreach($team1 as $key => $value)
 {
     if ($team1[$key]['vereniging'] == $team2[$key]['vereniging'])
     {
         return true;
     }      
  }

}

Even wat verklaring: waarom ik twee arrays met spelers ($team1 & $team2) maak; dit is met het oog op later, zodat ik ze makkelijk kan laten wisselen van zwart naar wit en vice versa.

Ik blijf ze dus shuffelen totdat er geen spelers van dezelfde vereniging tegen elkaar spelen.

Bovenstaande werkt en geeft een goede indeling voor de eerste ronde.

Mijn vragen zijn:
  1. Doe ik dit zo handig, of kan ik efficiënter het zelfde resultaat bereiken?
  2. Hoe nu verder? Ik zie niet helemaal in hoe ik kan checken dat men in de tweede ronde niet dezelfde tegenstander tegenkomt...

Voor ronde twee zou ik opnieuw kunnen shuffelen, maar hoe vind ik dan nog de vorige tegenstander en vergelijk deze met de nieuwe?

Alvast bedankt voor het meedenken.

Met vriendelijke groet,

Nelis
 
Laatst bewerkt:
Hoe ik het uiteindelijk heb opgelost:

PHP:
$alle_teams = mysqli_query($dbc, "SELECT * FROM `teams` WHERE tid = '".$_GET['tid']."' AND (`dummy` = '0' OR `spelend_dummy`= '1') ORDER by RAND()");

$i = 1;
while ($a = mysqli_fetch_array($alle_teams))
{
    $team1[$i] = $a;
    if ($b = mysqli_fetch_array($alle_teams))
    {
        $team2[$i] = $b;
    }
    $i++;
}

$i = 1;
while ($i <= 3)
{
    while (IntSchoolCheck($team1,$team2))
    {
        shuffle($team1);
        shuffle($team2);
    }
    
    foreach ($team1 as $key => $value)
    {
        mysqli_query($dbc,"INSERT INTO `wedstrijden` (tid,team1,team2,ronde) VALUES ('".$_GET['tid']."','".$team1[$key]['id']."','".$team2[$key]['id']."','".$i."')") or die(mysqli_error($dbc));
    }
    
    // Kolommen omdraaien, ivm voor/tegen
    $buffer = $team1;
    $team1 = $team2;
    $team2 = $buffer;
    
    $i++;
?>
}

Ook de functie heb ik iets aangepast:
PHP:
function IntSchoolCheck($team1,$team2) {
    GLOBAL $dbc;

    foreach($team1 as $key => $value)
    {
        $result = mysqli_query($dbc,"SELECT * FROM `wedstrijden` WHERE (`team1`='".$team1[$key]['id']."' AND `team2`='".$team2[$key]['id']."') OR (`team1`='".$team2[$key]['id']."' AND `team2`='".$team1[$key]['id']."')") or die(mysqli_error($dbc));
        if ($team1[$key]['school'] == $team2[$key]['school'] || mysqli_num_rows($result) > 0) //speelt men deze ronde tegen eigen school?
        {
            return true;
        }     
    }
}

Bedankt voor degene die hebben meegedacht... Ik zag het antwoord gewoon even niet, dit werkt, hoewel ik me nog steeds afvraag hoe het efficiënter zou kunnen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan