2016-12-31 2 views
2

Ich versuche, ein Abfragesystem zu implementieren, wo, wenn der Benutzer auf einer bestimmten Abstimmungsseite landet und tatsächlich die Frage beantwortet, dann werden die ID und ihre Option protokolliert. Nehmen wir zum Beispiel an, dass die ID dieser Frage 67 ist und sie die Option 2 beantwortet haben. Dann möchte ich, dass das Array in etwa wie folgt aussieht: 67:2. Die Protokollarray-Daten werden in einer SESSION Variablen gespeichert und jedes Mal, wenn der Benutzer eine Frage beantwortet, fügt er dieses Array hinzu. Wenn der Benutzer versucht, zu einer Umfrage zu navigieren, die er bereits beantwortet hat, wird die beantwortete Option angezeigt.Verfolgen von 2 Schlüssel-Array

Ich weiß, ich könnte konkatenate und die in_array Funktion verwenden, wenn dies ein Array von nur Zahlen war, wie "3,2,1,5,6", aber wie kann ich dies für diese Art von Array tun? ("3:1, 2:2, 1:1") wobei die erste Ziffer die ID und die zweite Ziffer die gewählte Option ist. Wie verwende ich if (in_array($id)), wenn nach der Verkettung so etwas wie "3:1"?

+0

warum keine Schlüsselwertepaare verwenden? –

+0

Ich kann wegen '$ _SESSION' keine Geige erzeugen. –

+0

Es ist völlig klar, nicht sicher, warum jemand gewählt hat, um es als unklar zu schließen. –

Antwort

3

Ich würde sagen, Sie auf diese Weise tun können:

// Log an answer: 
$_SESSION["polls"][$question] = $answer; 

Auf diese Weise wird es Protokollierung sein:

{ 
    "polls": { 
    "question-6": "answer-2", 
    "question-4": "answer-1" 
    } 
} 

So wird es keine Doppelarbeit. Um zu überprüfen, ob der Benutzer bereits beantwortet hat, können Sie dies tun:

in_array("question-6", array_keys($_SESSION["polls"])) 

Dies wird Ihnen geben, wenn der Benutzer Frage 6 oder nicht beantwortet hat.

PHP Script

<?php 
    header("Content-type: text/plain"); session_start(); 
    // Log few questions and answers. 
    $question = "question-67"; 
    $answer = "answer-2"; 
    $_SESSION["polls"][$question] = $answer; 
    $question = "question-55"; 
    $answer = "answer-1"; 
    $_SESSION["polls"][$question] = $answer; 
    $question = "question-42"; 
    $answer = "answer-3"; 
    $_SESSION["polls"][$question] = $answer; 
    // Let's check if the next question, which will be the same one, has been answered or not. 
    $question = "question-67"; 
    $answer = "answer-2"; 
    if (in_array($question, array_keys($_SESSION["polls"]))) 
     echo "Question has been answered."; 
    else 
     echo "Question not answered."; 
?> 

ich die Ausgabe als:

Question has been answered. 
+0

Wenn die Frage bereits beantwortet wurde, wie kann ich die Antwort des Benutzers auf diese Frage von der Sitzungsvariablen erhalten? – user2896120

+0

@ user2896120 Dies gibt die Antwort: '$ _SESSION [" Umfragen "] [$ Frage]' wird die Antwort für die $ Frage haben. –

+0

@ user2896120 Wenn ich die Zeile ändern: "echo" Frage wurde beantwortet. ";' To "echo" Frage wurde beantwortet. Die Antwort ist: {$ _SESSION ["Umfragen"] [$ question]} ";', Es wird mir angezeigt: 'Frage wurde beantwortet. Die Antwort ist: Antwort-2. Glücklich? –