2012-03-27 15 views
2

Ich habe 4 Arrays, jeweils mit einer Frage und Antwort. Ich möchte ein zufälliges Frage/Antwort-Array auswählen. Hier ist mein Code:Wie konvertiere ich eine Zeichenfolge in einen Array-Namen (PHP)?

<?php 
$query_1 = array("What is two plus three?", "5"); 
$query_2 = array("What is four plus two?", "6"); 
$query_3 = array("What is seven plus one?", "8"); 
$query_4 = array("What is six plus three?", "9"); 

$rand_key = rand(1,4); 
$current_query = ('$query_'.$rand_key); 
$question = $current_query[0]; 

print $question; 
?> 

$ Frage druckt einfach "$" anstelle des ersten Elements des Arrays. Wie bekomme ich $ Frage, um das erste Element des Arrays zu drucken?

- ja, ich bin ein php noob.

+0

whe Hast du das so zugeordnet? $ question = $ aktuelle_anfrage [0]; ich meine Offset 0? – Milap

+0

@Milap: Weil das OP dachte, '$ current_query' würde den _value_ der Variablen namens '$ query_2' enthalten (zum Beispiel), während es einfach die Zeichenkette" $ query_2 "enthält und mit eckiger Klammer-Syntax (wie ein Array) gibt das Zeichen bei Offset 0 zurück (in diesem Fall), was "$" ist. – MrWhite

Antwort

0

Versuchen Sie, Klammern zu verwenden.

$question = "{$current_query[0]}"; 
5

Dies ist wahrscheinlich ein straight-forward Weg, um Ihre Aufgabe zu erledigen. Anstatt jede Frage in ihrem eigenen Array zu speichern und sie dynamisch abzurufen (d. H. 'question' . $random_value), speichern Sie jede Frage und Antwort in demselben Array und nutzen Sie den Vorteil array_rand().

<?php 
$questions[] = array("What is two plus three?", "5"); 
$questions[] = array("What is four plus two?", "6"); 
$questions[] = array("What is seven plus one?", "8"); 
$questions[] = array("What is six plus three?", "9"); 

$randomKey = array_rand($questions); // Returns a random key from $questions 
$question = $questions[$randomKey]; 

print $question[0]; // Question 
print $question[1]; // Answer 
+0

Perfekt! Vielen Dank Herr B. – jshock

0

Mit Ihrer aktuellen Datenstruktur, müssen Sie Variable variables ... wird in $current_query, gespeichert

$current_query = 'query_'.$rand_key; // Removed $ prefix in front of 'query' 
$question = ${$current_query}[0]  // Variable variables 

Der Name Ihrer Variablen verwenden, indem Sie einen anderen $ vor dieser Platzierung Sie sind der Zugriff auf Wert, der in einer Variablen dieses Namens gespeichert ist. Die geschweiften Klammern (komplexe Syntax) vermeiden jede Mehrdeutigkeit, dh. Sie beziehen sich nicht auf den Namen einer Variablen, die im ersten Element eines Arrays gespeichert ist.

Allerdings gibt es bessere Möglichkeiten, um Ihre Daten zu speichern, wie vorgeschlagen von @ Mike B

3

Ihre Quelle Fix:

$rand_key = rand(1,4); 
$current_query = ${'query_'.$rand_key}; 
$question = $current_query[0]; 

print $question; 
1
<?php 
$qa = array(
array("What is two plus three?", "5"), 
array("What is four plus two?", "6"), 
array("What is seven plus one?", "8"), 
array("What is six plus three?", "9") 
); 

$rand = rand(0,count($qa)-1); 

print $qa[$rand][0]; 
?> 
0

Versuchen:

eval("\$question = ".$current_query."[0];"); 

Referenz : http://php.net/manual/en/function.eval.php

+0

Ausgezeichnet! Vielen Dank. Ich dachte mir, dass es eine Funktion dafür gab, aber ich konnte sie nicht finden. – jshock

+0

@jshock: Sie sollten [variable Variablen] (http://uk3.php.net/manual/en/language.variables.variable.php) anstelle von 'eval()' in diesem Fall verwenden. Schneller und sicherer. – MrWhite

Verwandte Themen