2017-02-08 17 views
0

я в настоящее время в процессе создания викторины, с форматом таблицы:Использование цикла Foreach для присвоения значений массива в нескольких массивах

| id |  question  | option1 | option2 | option3 | answer | 
-------------------------------------------------------- 
| 1 | What is my name? | Dave | Bob | Charles | Linda | 

Я пытаюсь проверить ответы пользователя и я не совсем конечно, как это сделать. Я немного тупик, используя цикл foreach, чтобы назначать значения массива другим массивам. Следующий код в matresult.php неправильно, но он должен показать, что я пытаюсь достичь:

Within matquiz.php У меня есть

//MySql query to select all data from matquiz table 
$query="SELECT * FROM MatQuiz";       
//Assign the query to a result variable 
$result = mysql_query($query, $connect); 

while($row = mysql_fetch_assoc($result)){ 
CODE 
} 

Within matresult.php У меня есть

$array3 = array(); 
$array4 = array(); 
$array5 = array(); 
$array6 = array(); 
$array7 = array(); 
$array8 = array(); 

$finalresults = array($row['ID'], $row['question'], $row['option1'], $row['option2'], $row['option3'], $row['answer']); 

foreach($finalresults as $value){         

    array_push($array3, $value['ID']);  //ID 
    array_push($array4, $value['question']); //question 
    array_push($array5, $value['option1']); //op1 
    array_push($array6, $value['option2']); //op2 
    array_push($array7, $value['option3']); //op3 
    array_push($array8, $value['answer']); //answer 
} 

Что Я пытаюсь добиться того, чтобы указать значение массива $ finalresults в 6 отдельных массивов и сделать это для 5 вопросов/строк.

Так, например, я хочу, чтобы array3 содержал все 5 идентификаторов вопроса. [1,2,3,4,5], и я хотел бы, чтобы массив4 содержал все 5 вопросов и т. Д.

Я знаю, что синтаксис внутри цикла foreach неверен, но это мой вопрос к вам, как бы я мог пойти об этом?

+0

Глядя на то, что вы сделали, это выглядит правильно, хотя и немного многословным. Какие проблемы/ошибки вы получаете? –

+0

Вы вызываете 'mysql_fetch_assoc()' только один раз? Если ожидается, что запрос вернет несколько строк, вам нужно будет вызвать его в цикле 'while'. Также имейте в виду, что функции 'mysql _ *()' устарели давно и больше не доступны по умолчанию в последних версиях PHP. mysqli или PDO являются подходящими заменами. –

+0

Он вызывается внутри цикла while, в соответствии с ** EDIT **. – Kieran

ответ

0

Прежде всего, вероятно, вы должны использовать mysqli_query и mysqli_fetch_array, поскольку они более распространены в наши дни. См. here по причинам.

Я также думаю, что вам не нужен foreach вообще, просто используйте mysqli_fetch_array в цикле while, нет необходимости в другом цикле.

Что касается array_push() вызовов, вы можете написать те, как это:

$array3[] = $row['ID']; 

И они имеют тот же эффект, и я думаю, что это более распространенное явление. См. here в руководстве по PHP. Если вы не укажете конкретный индекс в назначении массива, PHP просто присваивает следующий доступный числовой индекс.

Я не уверен, что вы используете $ finalresults, но это не нужно ни, насколько я могу судить, поскольку вы просто использовали его как временную область хранения данных, которые вы собираетесь назначить ваш массив3-array8 в любом случае. Я удалил это из своего примера.

Этот пример имеет все в том же файле, разбить его, если вам нужно:

<?php 

$array3 = array(); 
$array4 = array(); 
$array5 = array(); 
$array6 = array(); 
$array7 = array(); 
$array8 = array(); 

$query = "SELECT * FROM MatQuiz";       
$result = mysqli_query($connect, $query); 

while ($row = mysqli_fetch_array($result)) { 

    $array3[] = $row['ID']; 
    $array4[] = $row['question']; 
    $array5[] = $row['option1']; 
    $array6[] = $row['option2']; 
    $array7[] = $row['option3']; 
    $array8[] = $row['answer']; 

} 
+0

Идеально! Большое вам спасибо, кажется, я значительно усложнил ситуацию. Еще очень новичок в использовании php. Я также обновлю код, чтобы использовать mysqli. Цените помощь, спасибо. – Kieran

+0

Без проблем, рад, что я мог бы помочь! –