Ich schreibe ein PHP-Skript, das mir eine JSON-Datei im folgenden Format zurückgeben kann. Ich möchte diese Struktur erstellen, indem ich Daten aus meinen Datenbanktabellen abrufe. Ich verwende SlickQuiz Plugin und habe eine harte Zeit, um ein Array von Objekten (d. H. Optionen) innerhalb des Frageobjekts zu erstellen ... das wiederum als Array enthalten ist.Zurückgeben der komplexen JSON-Struktur in PHP
{
"info": {
"name": "This is Exam name",
"main": "Find out with this super crazy knowledge",
"results": "Get ready",
"level1": "Result Poor",
"level2": "Result Average",
"level3": "Result Good",
"level4": "Result Very Good",
"level5": "Result Great"
},
"questions": [
"q": "Which is the letter A in the English alphabet?",
"a": [
{"option": "8", "correct": false},
{"option": "14", "correct": false},
{"option": "1", "correct": true},
{"option": "23", "correct": false}
],
"correct": "This is correct",
"incorrect": "It's the first letter of the alphabet."
},
{
"q": "Eureka Which of the following best represents your preferred breakfast?",
"a": [
{"option": "Bacon and eggs", "correct": false},
{"option": "Fruit, oatmeal, and yogurt", "correct": true},
{"option": "Leftover pizza", "correct": false},
{"option": "Eggs, fruit, toast, and milk", "correct": true}
],
"select_any": true,
"correct": "<p><span>Nice!</span> Your cholestoral level is probably doing alright.</p>",
"incorrect": "<p><span>Hmmm.</span> You might want to reconsider your options.</p>"
},
{
"q": "Eureka Where are you right now? Select ALL that apply.",
"a": [
{"option": "Planet Earth", "correct": true},
{"option": "Pluto", "correct": false},
{"option": "At a computing device", "correct": true},
{"option": "The Milky Way", "correct": true}
],
"correct": "<p><span>Brilliant!</span> You're seriously a genius, (wo)man.</p>",
"incorrect": "<p><span>Not Quite.</span> You're actually on Planet Earth, in The Milky Way, At a computer. But nice try.</p>"
},
{
"q": "How many Eureka of rain does Michigan get on average per year?",
"a": [
{"option": "149", "correct": false},
{"option": "32", "correct": true},
{"option": "3", "correct": false},
{"option": "1291", "correct": false}
],
"correct": "<p><span>Eureka bananas!</span> I didn't actually expect you to know that! Correct!</p>",
"incorrect": "<p><span>Fail.</span> Sorry. You lose. It actually rains approximately 32 inches a year in Michigan.</p>"
},
{
"q": "Is Earth bigger than a basketball?",
"a": [
{"option": "Yes", "correct": true},
{"option": "No", "correct": false}
],
"correct": "<p><span>Eureka Job!</span> You must be very observant!</p>",
"incorrect": "<p><span>ERRRR!</span> What planet Earth are <em>you</em> living on?!?</p>"
]
}
So habe ich versucht, dies mit PHP zu generieren.
function generateJSON($pdo){
$response = array();
$response["error"] = false;
$response["questions"] = array();
$stmt = $pdo->prepare("SELECT * FROM questions");
$stmt->execute();
$result= $stmt->fetchAll();
if($stmt->rowCount() > 0){
foreach($result as $row) {
$tmp = array();
$tmp["id"] = $row["id"];
$tmp["q"] = $row["question"];
$tmp["correct"] = $row["question"];
$tmp["incorrect"] = $row["subject_id"];
$tmp["status"] = $row["level_id"];
//Fetching the options
$stmt2 = $pdo->prepare("SELECT * FROM question_options WHERE question_id = ".$tmp["id"]);
$stmt2->execute();
$opt_result= $stmt2->fetchAll();
foreach($opt_result as $opt_row) {
$option = array();
$option["option"] = $opt_row["option_text"];
$option["correct"] = $opt_row["is_correct"] ==1;
array_push($response["questions"], $option);
}
//End of fetching options for this question
array_push($response["questions"], $tmp);
}
}
echoRespnse(200, $response);
}
Ich bin etwas neu, dies zu ... und sicher nicht, ob ich Sie müssen eine ähnliche PHP-Klasse erstellen und diese dann als json codieren. Aber jedes Beispiel oder Vorschlag wird sehr geschätzt. –
Das Erstellen eines Satzes von Klassen, die die 'JsonSerializable'-Schnittstelle implementieren und' json_encode' für das komplexe Objekt verwenden, ist der objektorientierte Ansatz dafür, ist aber optional. Ein assoziatives Array zu erstellen, das alle benötigten Informationen kapselt, ist wahrscheinlich einfacher. – apokryfos