Подсчитать количество правильных ответов в базе данных

#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. Если я запускаю запрос, перейдя в базу данных, он выдает мне правильный ответ.