Gero: richtige Antworten den richtigen Fragen zuordnen (Quiz) - Array

Hallo,

ich möchte für ein paar Freunde ein kleines Quiz machen. Keine große Sache. Ich habe dazu 20 Fragen in einem Array, von denen 10 angezeigt werden.

$fragen = array(1=>"Frage1",2=>"Frage2",3=>"Frage..usw");

Bei jedem weiteren Versuch soll die Fragenstruktur neu gestaltet sein bzw. auch mal eine andere Frage auftauchen. Das löse ich so:

$rand_keys = array_rand($fragen, 10);  
echo $fragen[$rand_keys[0]] . "\n<br><br>";  ...usw

Die Antworten sollen per Radiobutton angeklickt werden.
Mir ist schon klar, das ich das in dieser Weise angehen muss

<input type="radio" name="Antwort">  

aber wie stelle ich sicher, das eben "name" immer mit der richtigen Antwort gefüllt ist? Die Antwort ist immer ein Wort oder eine Zahl.

Vielen Dank

  1. Hallo,

    ich möchte für ein paar Freunde ein kleines Quiz machen. Keine große Sache. Ich habe dazu 20 Fragen in einem Array, von denen 10 angezeigt werden.

    $fragen = array(1=>"Frage1",2=>"Frage2",3=>"Frage..usw");

    aber wie stelle ich sicher, das eben "name" immer mit der richtigen Antwort gefüllt ist? Die Antwort ist immer ein Wort oder eine Zahl.

    indem Du Dein Array entsprechend aufbaust, zum Beispiel:

    $fragen = array(  
       1 => array(  
           'frage' => <Text der Frage>,  
           'antworten' => array(  
               1 => array(  
                   'antwort' => <Text der Antwort>,  
                   'richtig' => True oder False  
                 ),  
               2 => array(  
                   'antwort' => <Text der Antwort>,  
                   'richtig' => True oder False  
                 )  
               #, [...] weitere Antworten  
           )  
       ),  
       2 => array(  
           'frage' => <Text der Frage>,  
           'antworten' => array(  
               1 => array(  
                   'antwort' => <Text der Antwort>,  
                   'richtig' => True oder False  
                 ),  
               2 => array(  
                   'antwort' => <Text der Antwort>,  
                   'richtig' => True oder False  
                 )  
               #, [...] weitere Antworten  
           )  
        )  
        #, [...] weitere Fragen  
    )
    

    so hast Du zusammen, was zusammengehört und kannst die Antworten im Formular ebenfalls mit einer foreach-Schleife zusammenbauen.

    Nimmst Du für die Antworten ein eigenes eigenständiges Array, so wird die Wartung fehleranfälliger (solange Du die Arrays von Hand schreibst).

    Unterscheidest Du zwischen Fragen, bei denen nur eine Antwort möglich ist (Radiobutton) und solchen mit mehreren richtigen Antworten (Checkboxen) oder gar der direkten Eingabe in ein Textfeld, so füge einen weiteren Eintrag

    'typ' = ...

    hinzu.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      ich habe das jetzt mal testweise versucht, aber ich habs nicht verstanden. Wie kann ich dann darauf zugreifen?

      $fragen = array(  
         1 => array(  
             'frage1' => "Was ist hier los?",  
             'antworten1' => array(  
                 1 => array(  
                     'antwort' => "Gar nichts",  
                     'richtig' => "True"  
                   ),  
                 2 => array(  
                     'antwort' => "Total viel",  
                     'richtig' => "False"  
                   ),  
                 3 => array(  
                     'antwort' => "Mit PHP labern",  
                     'richtig' => "False"  
                   )  
             )  
         ),  
         2 => array(  
             'frage' => "Klappt es jetzt?",  
             'antworten' => array(  
                 1 => array(  
                     'antwort' => "Hoffentlich",  
                     'richtig' => "True"  
                   ),  
                 2 => array(  
                     'antwort' => "Hoffen und Beten tut man in der Kirche",  
                     'richtig' => "False"  
                   ),  
                  3 => array(  
                     'antwort' => "Es klappt nicht.",  
                     'richtig' => "False"  
                   )  
             )  
          )  
          //#, [...] weitere Fragen  
      )  
        
      //echo $fragen["1"]["frage1"]["1"];  
      $indexe = array_keys($fragen);  
        
      echo $indexe;
      

      Ich habe "herumprobiert" und letztendlich den Versuch gestartet, mit array_keys() mir die Schlüssel ausgeben zu lassen, aber wie schon gesat, verstanden habe ich es noch nicht.

      Was muss ich tun?

      Vielen Dank

      1. Mahlzeit Gero,

        Wie kann ich dann darauf zugreifen?

        Wie Du auf Arrays allgemein zugreifst ...

        $fragen = array(

        1 => array(
               'frage1' => "Was ist hier los?",
               'antworten1' => array(
                   1 => array(
                       'antwort' => "Gar nichts",
                       'richtig' => "True"
                     ),
                   2 => array(
                       'antwort' => "Total viel",
                       'richtig' => "False"
                     ),
                   3 => array(
                       'antwort' => "Mit PHP labern",
                       'richtig' => "False"
                     )
               )
           ),

          
        Preisfrage: was ist der Unterschied zwischen ["True"](http://de3.php.net/manual/de/language.types.string.php) und [True](http://de3.php.net/manual/de/language.types.boolean.php)?  
          
          
        MfG,  
        EKKi  
        
        -- 
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        
  2. Hi!

    wenn ich nicht noch zu muede bin, hast du nirgends erwaehnt, wie Du die Antworten speicherst bzw. den Fragen zuweist. Ich nehme also mal an, genau das ist dein Problem, auch wenn Du eine andere Frage gestellt hast. (eine Antwort auf deine gestellte Frage waere z.b. <input type="radio" name="<?php echo $antwort ?>">

    Nimm doch ein mehrdimensionales Array, in dem immer Frage und Antwort gespeichert sind. eventuell auch noch eine Anzahl falscher Antworten.

    --
    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
          - T. Pratchett
  3. Lieber Gero,

    Mir ist schon klar, das ich das in dieser Weise angehen muss

    <input type="radio" name="Antwort">

    das überrascht mich jetzt. Das name-Attribut ist soetwas wie ein Variablenname, nicht jedoch der Variableninhalt. Dazu kommt noch, dass Radio-Buttons, die zu einer Gruppe gehören sollen, wobei das Anklicken des einen Radio-Buttons einen anderen "leert", identische Werte in ihrem name-Attribut benötigen.

    Ich hätte jetzt eher etwas wie das hier erwartet:

    <li>  
        <input type="radio" name="antwort_frage4" value="2" id="antwort_frage4_r1">  
        <label for="antwort_frage4_r1">Lösung: 2 Äpfel</label>  
    </li>  
    <li>  
        <input type="radio" name="antwort_frage4" value="4" id="antwort_frage4_r2">  
        <label for="antwort_frage4_r2">Lösung: 4 Äpfel</label>  
    </li>
    

    Da ich <label><input type="radio"...</label> wegen des IE vermeide, arbeite ich immer mit IDs. Daher habe ich mit "antwort_frage4_rx" eine Art laufende Nummer in den IDs der Radio-Buttons verwendet. Das name-Attribut muss bei allen Radio-Buttons identisch sein (hier "antwort_frage4"), die zu derselben Antwort gehören. Sonst stimmt die Logik aus HTML-Sicht nicht!

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)