#php #loops #oop
#php #циклы #ооп
Вопрос:
Я пытаюсь подсчитать правильные ответы в базе данных. У меня есть следующие строки кода:
$getresult = $quizAns->getAnswersByUser($_POST['user_id']);
if($getresult){
$count = count($getresult);
for ($x = 1; $x <= $count; $x ) {
$match = $quiz->matchAnswer($getresult[$x]->question_id, $getresult[$x]->ans_id);
}
}
$counts = count($match);
В $getresult
я получаю количество ответов, отправленных пользователем, которое должно быть 4, всегда таким:
Array
(
[0] => stdClass Object
(
[id] => 220
[user_id] => 84
[question_id] => 43
[answer_id] => 31
)
[1] => stdClass Object
(
[id] => 219
[user_id] => 84
[question_id] => 48
[answer_id] => 53
)
[2] => stdClass Object
(
[id] => 218
[user_id] => 84
[question_id] => 49
[answer_id] => 56
)
[3] => stdClass Object
(
[id] => 217
[user_id] => 84
[question_id] => 50
[answer_id] => 62
)
)
Я хочу перебрать каждый индекс и подсчитать количество совпадающих ответов. Но, если я попытаюсь выполнить отладку $counts
, я получу только 1. Я ожидаю получить 4 или 3, но не только один. Следующий код предназначен для функции match answer:
public function matchAnswer($question_id, $ans_id){
$args = array(
'where' => array(
'id' => $question_id,
'ans_id' => $ans_id
)
);
return $this->select($args);
}
И вот функция для getAnswersByUser
:
public function getAnswersByUser($id, $is_die = false){
$args = array(
'where' => array(
'user_id' => $id
)
);
return $this->select($args);
}
Комментарии:
1. Для чего нужен код
getAnswersByUser
?2. @NigelRen Я добавил функцию в свой вопрос.
3. вы не увеличиваете
counts
переменную. это должно быть в цикле.4. Проверьте результаты
$this->select($args)
, убедитесь, что это возвращает список, который вы ожидаете.5. преобразовать $match[] = $quiz-> matchAnswer($getresult[$x]->question_id, $getresult[$x]->ans_id);
Ответ №1:
Замените это на
$getresult = $quizAns->getAnswersByUser($_POST['user_id']);
if($getresult){
$count = count($getresult);
for ($x = 1; $x <= $count; $x ) {
$match = $quiz->matchAnswer($getresult[$x]->question_id,$getresult[$x]->ans_id);
}
}
$counts = count($match);
с помощью
$getresult = $quizAns->getAnswersByUser($_POST['user_id']);
$counts = 0;
if($getresult){
$count = count($getresult);
for ($x = 0; $x < $count; $x ) {
$match = $quiz->matchAnswer($getresult[$x]->question_id, $getresult[$x]->ans_id);
if($match){
$counts = 1;
}
}
}
$counts = count($match);
}
Комментарии:
1. первые варианты возвращают 0, а вторые — 5, оба неверны.
2. Я хочу увеличить значение count, если ответ правильный.
3. можете ли вы проверить вывод
$this->select($args)
4. если я проверяю выходные данные, ut выдает запрос, который должен быть выполнен в базе данных. Результат таков
SELECT * FROM quiz WHERE id = :id AND ans_id = :ans_id ORDER BY quiz.id DESC
5. Если я запускаю запрос, перейдя в базу данных, он выдает мне правильный ответ.