我想插入一个测验的详细信息,其中许多字符串(问题,教授,课程等)中,我有一个答案数组(及其对应的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();吗?循环内?我进行了测试,并且似乎可以正常工作,以这种方式进行操作是否正确?
答案 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";
}
?>