Как объявить массив объектов для цикла for в PHP? - PullRequest
1 голос
/ 09 апреля 2019

Я хочу вставить детали теста, в котором среди множества строк (вопрос, профессор, курс и т. Д.) У меня есть один массив ответов (и соответствующий ему массив is_correct), поэтому я подумал о созданиицикл, чтобы правильно вставить каждый ответ.

Проблема в том, что я не знаю, как правильно вызвать объект questionQuiz.Я заметил, что если в начале я объявляю два разных объекта, а затем делаю это вручную:

$questionQuiz1 -> insert_question($quiz_name,$professor,$course,$question,$points,$answer[0],$is_correct[0]);
$questionQuiz2-> insert_question($quiz_name,$professor,$course,$question,$points,$answer[1],$is_correct[1]);

, это работает.Как мне объявить этот объект как массив и использовать его в итерации?

Я пробовал что-то подобное, но это не правильно.

$questionQuiz[]  = new Test();
    if(isset($_POST['quiz_name'],$_POST['professor'],$_POST['course'],$_POST['question'],$_POST['points'],$_POST['answer'], $_POST['is_correct'])) {
        $quiz_name = $_POST['quiz_name'];
        $professor = $_POST['professor'];
        $course = $_POST['course']; 
        $question = $_POST['question'];
        $points = $_POST['points']; 
        $answer = $_POST['answer'];
        $is_correct = $_POST['is_correct'];


        if(!empty($quiz_name) && !empty($professor)&& !empty($course)&& !empty($question)&& !empty($points)&& !empty($answer) && !empty($is_correct)){


            for($i=0; $i<count($answer); $i++) {
                $questionQuiz[$i] -> insert_question($quiz_name,$professor,$course,$question,$points,$answer[$i],$is_correct[$i]);
            }


        }else{
            echo json_encode("param must not be empty"); 
        }
    }

Должен ли я создать экземпляр $ questionQuiz [] = new Test ();внутри цикла?Я проверил, и, кажется, работает, это правильно сделать так?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2019

Итак, проблема в вашем коде в том, что вы создаете только 1 экземпляр класса Test (вверху).А внутри вашего цикла for вы только ссылаетесь на него и вызываете метод insert_question для него.Осторожно: в этом случае существует только $questionQuiz[0], поэтому в других случаях ничего не происходит (или может произойти ошибка).

Опция 1

Если вы хотите толькочтобы вызвать метод класса Test, вы можете вызвать его в цикле for следующим образом:

(new Test())->insert_question( ... etc ... );

Опция 2

Если вы хотитечтобы сохранить созданные объекты класса, вы создаете новый объект Test, вызываете для него метод insert_question и добавляете объект в свой массив:

$object = new Test();
$object->insert_question( ... etc ...);
$questionQuiz[] = $object;
0 голосов
/ 10 апреля 2019

Вы упомянули хранение сообщений в массиве объектов.будет что-то вроде этой работы?

<?php
if(isset($_POST['quiz_name'], $_POST['professor'], $_POST['course'], $_POST['question'], $_POST['points'], $_POST['answer'], $_POST['is_correct']))
{
    $quiz_name = $_POST['quiz_name'];
    $professor = $_POST['professor'];
    $course = $_POST['course'];
    $question = $_POST['question'];
    $points = $_POST['points'];
    $answer = $_POST['answer'];
    $is_correct = $_POST['is_correct'];
}

if(!empty($answer_array) && count($answer_array[5]) > 0)
{
    $count = count($answer_array[5]);
    $questionQuiz[]  = new Test();
    for($i=0; $i < $count; $i++)
    {
        //assuming your class is correct and you'll need to have it handle the incoming array how you want it to
        $answer_array = array($quiz_name, $professor, $course, $question, $points, $answer[$i], $is_correct[$i]);
        $questionQuiz[$i] -> insert_question($answer_array);
    }

}
else
{
    echo "param must not be empty";
}
?>
0 голосов
/ 10 апреля 2019

Кажется, что у вас есть вся логика, вы просто не делаете то, что говорите.

Создайте массив, а затем добавляйте новый объект в этот массив каждый раз через цикл.

$questionQuiz[]  = array();
    if(isset($_POST['quiz_name'],$_POST['professor'],$_POST['course'],$_POST['question'],$_POST['points'],$_POST['answer'], $_POST['is_correct'])) {

...

for($i=0; $i<count($answer); $i++) {
    $questionQuiz[$i] = new Test();
    $questionQuiz[$i] -> insert_question($quiz_name,$professor,$course,$question,$points,$answer[$i],$is_correct[$i]);
            }

...

Однако отмечу, что в функции insert_question(), в которой вы по отдельности вставляете опции с одним ответом на вопросы с несколькими вариантами ответов, что-то не так.Я бы подумал, что вы передадите массив вариантов ответа с соответствующей корректностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...