如何在PHP中为for循环声明对象数组?

时间:2019-04-09 20:54:01

标签: php object for-loop

我想插入一个测验的详细信息,其中许多字符串(问题,教授,课程等)中,我有一个答案数组(及其对应的is_correct数组),因此我想创建一个for循环可正确插入每个答案。

问题是我不知道如何正确调用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 个答案:

答案 0 :(得分:2)

所以代码中的问题是,您仅创建了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;

答案 1 :(得分:0)

您似乎已经将所有逻辑都摆好了,只是没有按照您的意思去做。

创建一个数组,然后每次循环都向该数组添加一个新对象。

nix-shell .

但是,我要指出的是,拥有一个名为$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]); } ... 的功能似乎有些麻烦,您可以在其中似乎是多项选择题的地方分别插入单个答案选项。我认为您会通过一系列具有正确性的答案选项。

答案 2 :(得分:0)

您提到将帖子存储到对象数组中。这样的东西行吗?

<?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";
}
?>