Ankündigung

Einklappen
Keine Ankündigung bisher.

Aus 2 Arrays (Auto / Fahrer) wird ein Rennkalender erzeugt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Aus 2 Arrays (Auto / Fahrer) wird ein Rennkalender erzeugt

    Hallo zusammen,

    ich bin derzeit dabei für mein Slot-Racing Community einen Rennplaner zu erstellen. Hierbei bin ich auf ein Problem gestoßen und habe nun die Hoffnung ihr könnt mir helfen

    Ausgangslage:
    - Ich habe n Fahrer in einer Liste
    - Ich habe n Autos in einer Liste

    Vorgehen:
    1. Ich wähle zuerst aus der Liste der Fahrer die aus, die beim Rennen teilnehmen (=> wird in einem Array "$teilnehmer_liste" gespeichert)
    2. Ich wähle aus der Liste der Autos die aus (max. 6 Stück), die beim Rennen benutzt werden (=> wird in einem Array "$auto_liste" gespeichert)
    3. Es wird ein Rennkalender erstellt

    Am Ende möchte ich ein Rennkalender haben, in dem jeder Fahrer 1x mit jedem Auto gefahren ist:

    Fahrer 1
    Fahrer 2
    Fahrer 3
    Fahrer 4

    Auto 1
    Auto 2

    Rennen 1:
    Fahrer 1 - Auto 1
    Fahrer 2 - Auto 2

    Rennen 2:
    Fahrer 3 - Auto 1
    Fahrer 4 - Auto 2

    Rennen 3:
    Fahrer 2 - Auto 1
    Fahrer 1 - Auto 2

    Rennen 4:
    Fahrer 4 - Auto 1
    Fahrer 3 - Auto 2

    So hat jeder Fahrer jedes Auto 1x gefahren. In der Datenbank würde ich dies wie folgt ablegen:

    tb_rennkalender
    renn_id (INT)
    rennen_nummer (INT) <= Identifikation des Rennens (z.B. Rennen 1)
    fahrer_id (INT) <= ID des Fahrers
    auto_id (INT) <= ID des genutzten Autos
    renn_ergebnis (INT) <= Hier wird später das Ergebnis je Fahrer eingetragen

    Ich habe mich für diese Art der Speicherung entschieden, da die Anzahl der Teilnehmer (Fahrer) theoretisch unbegrenzt sein kann und auch die Anzahl der Autos zwischen 2 - 6 liegen kann.

    Habt Ihr eine Idee wie ich das am sinnvollsten lösen kann?

    Danke und liebe Grüße
    Ben


  • #2
    Im Code sieht das bei mir derzeit so aus:

    PHP-Code:
                    $anzahl_rennen 1;
                    
    $count_fahrer 1;
                    
                    
    //Die Anzahl der Teilnehmer definiert automatisch die Anzahl der nötigen Rennen
                    
    while($anzahl_rennen <= sizeof($fahrer_teilnahme))
                    {
                        
    $count_autos 1;
                        
                        while(
    $count_autos <= sizeof($auto_teilnahme))
                        {
                            
    $auto_teilnahme_id key($auto_teilnahme);
                            if(
    $count_fahrer sizeof($fahrer_teilnahme)){
                                
    reset($fahrer_teilnahme);
                                
    $count_fahrer 1;
                            }
                            
    $fahrer_teilnahme_id key($fahrer_teilnahme);
                            
                            @
    mysql_query("INSERT INTO tb_einzelrennen SET 
                                        rennen_id = '
    $rennen_id',
                                        rennen_nummer = '
    $anzahl_rennen',
                                        fahrer_id = '
    $fahrer_teilnahme_id',
                                        auto_id = '
    $auto_teilnahme_id',
                                        einzelrennen_ergebnis = ''"
    );
                            
    $count_autos++;
                            
    $count_fahrer++;
                            
    next($fahrer_teilnahme);
                            
    next($auto_teilnahme);
                        }
                        
    $anzahl_rennen++;
                        
    reset($auto_teilnahme);
                    }                
                    echo(
    "<p id=\"ok_message\">Die einzelnen Rennen wurden erfolgreich erstellt. Es kann losgehen!</p>"); 
    Ich durchlaufe im Grunde das Array mit den genutzten Autos und schreibe dann in Abhängigkeit der Fahrer aus dem Array den Kalender in die Datenbank.

    Problem ist jedoch, wenn ich eine gerade Anzahl an Fahrern habe, dass er irgendwann beginnt Rennen mit Fahrer/Auto Zuordnung anzulegen, die es bereits gibt.

    Kommentar


    • #3
      Hier noch mal genauer dargestellt was mein Problem ist:

      Rennen-Nr.: 1
      Auto: 7 <== Fahrer: 21
      Auto: 2 <== Fahrer: 1


      Rennen-Nr.: 2
      Auto: 7 <== Fahrer: 25
      Auto: 2 <== Fahrer: 15

      Rennen-Nr.: 3
      Auto: 7 <== Fahrer: 24
      Auto: 2 <== Fahrer: 2

      Rennen-Nr.: 4
      Auto: 7 <== Fahrer: 21
      Auto: 2 <== Fahrer: 1


      Rennen-Nr.: 5
      Auto: 7 <== Fahrer: 25
      Auto: 2 <== Fahrer: 15

      Rennen-Nr.: 6
      Auto: 7 <== Fahrer: 24
      Auto: 2 <== Fahrer: 2

      P.S. Ich vermute das Thema müsste nach PHP-Einsteiger verschoben werden. Könnte dies einer der Moderatoren machen?

      Kommentar


      • #4
        wieso while und sizeof? man kann auch foreach benutzen, dann erpart man sich das mit next und reset usw..

        was steht aktuell in $fahrer_teilnahme und $auto_teilnahme ?

        deine einzelrennen und rennkalendar tabellen sind identsich..

        PHP-Code:
        <?php
        //Fake DB Daten
        $rennkalendarDaten     = array();
        $rennkalendarDaten  [] = array(
            
        'renn_id'       => 1,
            
        'rennen_nummer' => 1,
            
        'fahrer_id'     => 1,
            
        'auto_id'       => 1
        );
        $rennkalendarDaten  [] = array(
            
        'renn_id'       => 2,
            
        'rennen_nummer' => 1,
            
        'fahrer_id'     => 2,
            
        'auto_id'       => 2
        );

        $rennkalendarDaten  [] = array(
            
        'renn_id'       => 3,
            
        'rennen_nummer' => 2,
            
        'fahrer_id'     => 3,
            
        'auto_id'       => 1
        );

        $rennkalendarDaten  [] = array(
            
        'renn_id'       => 3,
            
        'rennen_nummer' => 2,
            
        'fahrer_id'     => 4,
            
        'auto_id'       => 2
        );
        //Daten Normalisieren
        $einzelRennen = array();
        foreach(
        $rennkalendarDaten as $dbRow){
            
        $key 'Rennen-Nr.: '.$dbRow['rennen_nummer'];
          if(!isset(
        $einzelRennen[$key])){
              
        $einzelRennen[$key] = array();
          }
            
        $einzelRennen[$key][]=array('Auto: '.$dbRow['auto_id'] => 'Fahrer:'.$dbRow['fahrer_id']);

        }

        var_dump($einzelRennen);
        ausgabe davon ist:
        array (size=2)
        'Rennen-Nr.: 1' =>
        array (size=2)
        0 =>
        array (size=1)
        'Auto: 1' => string 'Fahrer:1' (length=
        1 =>
        array (size=1)
        'Auto: 2' => string 'Fahrer:2' (length=
        'Rennen-Nr.: 2' =>
        array (size=2)
        0 =>
        array (size=1)
        'Auto: 1' => string 'Fahrer:3' (length=
        1 =>
        array (size=1)
        'Auto: 2' => string 'Fahrer:4' (length=
        will sagen du musst es nicht von einer tabelle ins andere übertragen, einfach aus einer tabelle auslesen und es dann formatiert ausgeben
        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

        Kommentar


        • #5
          PHP-Code:
          "<input type=\"checkbox\" name=\"fahrer_teilnahme[$fahrer_id]\" value=\"1\"> $fahrer_name<br />".
          "<input type=\"checkbox\" name=\"auto_teilnahme[$auto_id]\" value=\"1\"> $auto_typ<br />"
          in $fahrer_teilnahme steht z.B.

          $fahrer_teilnahme[1] = 1
          $fahrer_teilnahme[2] = 1
          $fahrer_teilnahme[3] = 0
          $fahrer_teilnahme[21] = 1
          ...

          Die Identifikation des Fahrers mache ich über den Array-Key und der Wert im Array sagt mir 0 = nimmt nicht teil oder 1 = nimmt teil

          Das ganze ebenso beim $auto_teilnahme

          Kommentar


          • #6
            OT: wo lernt man eigentlich das hier?

            PHP-Code:
            "<input type=\"checkbox\" name=\"fahrer_teilnahme[$fahrer_id]\" value=\"1\"> $fahrer_name<br />".
            "<input type=\"checkbox\" name=\"auto_teilnahme[$auto_id]\" value=\"1\"> $auto_typ<br />"
            ich wäre ja total faul um jede " mit einem \ zu versehen..

            PHP-Code:
            '<input type="checkbox" name="fahrer_teilnahme['.$fahrer_id.']" value="1"> '.$fahrer_name.'<br />'.
            '<input type="checkbox" name="auto_teilnahme['.$auto_id.']" value="1"> '.$auto_typ.'<br />'
            ist wesentlich liesbarer.. egal..

            PHP-Code:

            $fahrer_teilnahme 
            = array(
                
            1  => 1,
                
            2  => 1,
                
            3  => 0,
                
            21 => 1
            );
            $auto_teilnahme   = array(
                
            1  => 1,
                
            2  => 1,
                
            3  => 0,
                
            21 => 0
            );
            $rennenZaehler     0;
            $anzahlFahrer 0;
            $fahrerProRennen 2;
            foreach (
            $fahrer_teilnahme as $fahrerId => $nimmtTeil) {
                if (!
            $nimmtTeil) {
                     
            next($auto_teilnahme); //überpringe das auto weil fahrer nicht teilnimmt
                    
            continue;
                }
                
            next($auto_teilnahme);
                
            $autoId key($auto_teilnahme);
                
            $sql    sprintf(
                    
            "INSERT INTO tb_einzelrennen SET rennen_nummber = '%d',fahrer_id = '%d',auto_id = '%d',einzelrennen_ergebnis = ''",
                    
            $rennenNummer,
                    
            $fahrerId,
                    
            $autoId
                
            );
                
            $rennenZaehler++;
                
            $rennenNummer =  $rennenZaehler $fahrerProRennen;
                
            $anzahlFahrer++;
                echo 
            $sql;

            das sollte dir die richtige zuordnung liefern
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

            Kommentar


            • #7
              Ach irgendwann hat man sich das alles mal selbst angeeignet und dann bekommt man das schwer wieder raus . Werde ich mir heute Abend zu Hause mal ansehen, jetzt am Handy bissl schwer zu sehen

              Kommentar


              • #8
                Zitat von Bendais Beitrag anzeigen
                Ach irgendwann hat man sich das alles mal selbst angeeignet und dann bekommt man das schwer wieder raus . Werde ich mir heute Abend zu Hause mal ansehen, jetzt am Handy bissl schwer zu sehen
                http://codepad.org/NgBHLW6w hier kannst du ausprobieren welchen output du kriegst
                apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                Kommentar


                • #9
                  So nun bin ich endlich dazu gekommen, den Code auszuprobieren. Was mir aufgefallen ist, du hast die Anzahl der Autos pro Rennen auf 2 beschränkt. Dies ist allerdings nicht so. Es können bis zu 6 Autos gleichzeitig pro Rennen unterwegs sein.

                  Wenn ich also in der Liste 10 Teilnehmer auswähle und dazu 6 Autos, dann fahren immer 6 Autos auf der Strecke.

                  Kommentar

                  Lädt...
                  X