2016-02-26 57 views
0

我是android开发人员,并且是PHP中的新成员。我不太了解PHP。我创建如何创建下面给出的json字符串

<?php 
header('Content-Type: application/json; charset=utf-8'); 
$mysqli = new mysqli ('localhost', 'mabhi', '9993', 'general'); 
//PROBLEM LANGUAGE ????? 
if (function_exists('mysql_set_charset')) { 
    mysqli_set_charset($mysqli, 'utf8'); 
} else { 
    mysqli_query($mysqli, "SET NAMES 'utf8'"); 
} 
// Check if album id is posted as GET parameter 
$myq = $mysqli->query('SELECT * FROM Ages'); 
while ($myr = $myq->fetch_assoc()) { 
    $array["Questions"][] = (array(
     'Question'  => $myr['Question'], 
     'Answer'  => $myr['option1'], 
     'Answer'  => $myr['option2'], 
     'Answer'  => $myr['option3'], 
     'Answer'  => $myr['option4'], 
     'CorrectAnswer' => $myr['CorrectAnswer'], 
    )); 
} 
echo json_encode($array, JSON_UNESCAPED_UNICODE); 
?> 

输出:

{ 
    "Questions": [ 
    { 
     "Question": "sfsa sfd s sdf", 
     "Answer": "vvv", 
     "CorrectAnswer": null 
    }, 
    { 
     "Question": "dsfgdsfgv dsf dfs", 
     "Answer": "vvvv vv", 
     "CorrectAnswer": null 
    } 
    ] 
} 

但我想在下面的JSON格式输出:答案显示多次的每一个问题。请告诉我我的代码中有什么变化。

{ 
    "Questions": [ 
    { 
     "Question": "dfsfdsfgv dfsfsd dfs sf", 
     "CorrectAnswer": 3, 
     "Answers": [ 
     { 
      "Answer": "vvvvvvv" 
     }, 
     { 
      "Answer": "vvv" 
     }, 
     { 
      "Answer": "vv" 
     }, 
     { 
      "Answer": "v" 
     } 
     ] 
    }, 
    { 
     "Question": "dgdsgdsgdsgszdfvgfvds", 
     "CorrectAnswer": 0, 
     "Answers": [ 
     { 
      "Answer": "Lee" 
     }, 
     { 
      "Answer": "Wrangler" 
     }, 
     { 
      "Answer": "Levi's" 
     }, 
     { 
      "Answer": "Diesel" 
     } 
     ] 
    } 
    ] 
} 
+0

你所检查的'function_exists( 'mysql_set_charset')'但是你叫'mysqli_set_charset'。 'mysqli!= mysql'。我认为总是做'SET NAMES'utf8'' – Halcyon

+0

是好的,请检查它不是我的问题。 –

+0

@Abhihek,我知道,为什么我没有发布它作为答案;) – Halcyon

回答

0

正如jereon所指出的,您正在覆盖Answer键的值。你需要为所有答案一起创建一个单独的数组。

变化

$array["Questions"][] = (array( 
'Question' => $myr['Question'], 
'Answer' => $myr['option1'], 
'Answer' => $myr['option2'], 
'Answer' => $myr['option3'], 
'Answer' => $myr['option4'], 
'CorrectAnswer' => $myr['CorrectAnswer'], 
)); 

$array["Questions"][] = (array( 
'Question' => $myr['Question'], 
'Answers' => array((object)array('Answer' => $myr['option1']), 
        (object)array('Answer' => $myr['option2']), 
        (object)array('Answer' => $myr['option3']), 
        (object)array('Answer' => $myr['option4'])), 
'CorrectAnswer' => $myr['CorrectAnswer'], 
)); 
0

你做错的第一件事是要覆盖的答案选项的值,所以会发生什么是当你的第一个选项将通过第二个选项,与第3和第4个与第三个选项选择第二个选项被覆盖。所以你将不得不创建一个数组来获得答案,并推送该数组中的每个答案,并最终分配这个答案选项数组来回答。所以,你的代码看起来应该像下面

while ($myr = $myq->fetch_assoc()) { 
    $answers_array=new array(); 

    $answer_option=new stdClass(); // Create a object to format in required format and use this object to store every option of answer 
    $answer_option->answer=$myr['option1'];  
    array_push($answers_array,$answer_option); 
    $answer_option->answer=$myr['option2']; 
    array_push($answers_array, $answer_option); 
    $answer_option->answer=$myr['option3']; 
    array_push($answers_array, $answer_option); 
    $answer_option->answer=$myr['option4']; 
    array_push($answers_array,$answer_option); 

    $array["Questions"][] = array( 
    'Question' => $myr['Question'], 
    'CorrectAnswer' => $myr['CorrectAnswer'], 
    'answers' => $answers_array; 
); 

}

0

您不应该将具有相同标识符(“答”)的多个数组元素,因为他们只会互相覆盖。我建议你使用的答案非关联数组,这样你的目标JSON应该是这样的:

{ 
    "Questions": [ 
    { 
     "Question": "dfsfdsfgv dfsfsd dfs sf", 
     "CorrectAnswer": 3, 
     "Answers": [ 
     "vvvvvvv", 
     "vvv", 
     "vv", 
     "v" 
     ] 
    }, 
    { 
     "Question": "dgdsgdsgdsgszdfvgfvds", 
     "CorrectAnswer": 0, 
     "Answers": [ 
     "Lee", 
     "Wrangler", 
     "Levi's", 
     "Diesel" 
     ] 
    } 
    ] 
} 

因此你可以使用下面的PHP代码回路:

$array = array(); 
while ($myr = $myq->fetch_assoc()) { 
    $array["Questions"][] = array(
     'Question'  => $myr['Question'], 
     'CorrectAnswer' => $myr['CorrectAnswer'], 
     'Answers'  => array(
      $myr['option1'], 
      $myr['option2'], 
      $myr['option3'], 
      $myr['option4'], 
     ), 
    ); 
} 
相关问题