[PHP] Tourney / Auto games plannen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Ik ben bezig met een tourney systeem met een aantal poolen.
Nu is de bedoeling dat dit script dus automatisch games maakt in de database (zodat iedere speler in die pool 1x tegen elkaar speelt.

Nu heb ik dit script gemaakt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$p_query = mysql_query("SELECT pool FROM wc_players WHERE pool NOT LIKE '0' GROUP by pool ORDER BY pool ASC");

while($p_data = mysql_fetch_object($p_query))
{

    echo("<h3>". $p_data->pool ."</h3>");

    $query = mysql_query("SELECT id, nickname FROM wc_players WHERE pool = '". $p_data->pool ."' ORDER BY id ASC");
    while($data = mysql_fetch_object($query))
    {

        $players[$data->id] = $data->nickname;

    }

    while(list($id, $nick) = each($players))
    {

        echo("<b>". $nick ."</b><br>\n");

        while(list($in_id, $in_nick) = each($players))
        {

            if($in_id != $id)
            {
                $cnt1 = mysql_numrows(mysql_query("SELECT id FROM wc_games WHERE p1 = '". $in_id ."' AND p2 = '". $id ."' AND pool = '". $p_data->pool ."'"));
                $cnt2 = mysql_numrows(mysql_query("SELECT id FROM wc_games WHERE p1 = '". $id ."' AND p2 = '". $in_id ."' AND pool = '". $p_data->pool ."'"));
                if($cnt1 == 0 AND $cnt2 == 0)
                {
                    echo("P1: <b>". $nick ."</b> vs P2: <b>". $in_nick ."</b><br>\n");
                    mysql_query("INSERT INTO wc_games VALUES (
                                            '',
                                            '". $p_data->pool ."',
                                            '". $id ."',
                                            '". $in_id ."',
                                            '0',
                                            '0',
                                            '0',
                                            '',
                                            '',
                                            '1'
                                           )") or die(mysql_error());
                }

            }

        }

        echo("<hr>");

    }

}


Het probleem is dit die de eerste while loop (while(list($id, $nick) = each($players))) maar 1x doet en niet herhaald.

Doe ik nou iets fout of kan het niet op deze manier?
Of is er mischien een makkenlijkere / beter manier?

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Het gaat fout omdat je tweemaal 'each($player)' in elkaar nest. Door de binnenste loop wordt de pointer in de $player array naar de laatste gebracht, waardoor de buitenste loop stopt.

Het makkelijkst is waarschijnlijk om in een van de twee loops een kopie van de andere te gebruiken.
code:
1
2
3
4
5
6
$playerscopy=$players;
while ($playerscopy){
   while ($players){
   ....
   }
}