Я пытаюсь отобразить средний результат из базы данных в представление, но я получаю эту ошибку:
Обнаружена ошибка PHP
Серьезность: Уведомление
Сообщение: преобразование массива в строку
Имя файла: views / resultview.php
Номер строки: 38
Вот код из контроллера:
$average['avg'] = $this->quiz->getAverage($quizid);
$this->load->view('resultview',array('quiz' => $quiz,
'score' => $score,
'average_score' => $average));
Функция из модели следующая:
function getAverage($quiz)
{
//get percentage from the database
$this->db->select_avg('score');
$this->db->where('id', $quiz);
$res = $this->db->get('userScoreQuiz');
if ($res->num_rows() != 1) {
// there should only be one row - anything else is an error
return false;
}
return $res->result_array();
}
и код из вида это:
<h4> Avg. score on all previous attempts: <?php echo $average_score['avg'] ?> %</h4>
Я не могу понять, почему это так.
Спасибо за вашу помощь, ребята.
Это слишком много кодирования, которое вы получили, вот элегантное решение:
function getAverage($quiz)
{
//get percentage from the database
$query = $this->db->select('AVG(score) as average_score')->from('userScoreQuiz')->where('id', $quiz)->get();
return $query->row()->average_score;
}
На ваш взгляд
$data['quiz'] = //fill this area
$data['average_score'] = $this->quiz->getAverage($quizid);
$data['score'] = //fill this area
$this->load->view('resultview', $data);
И они будут доступны как $quiz, $average_score, $score
function getAverage($quiz)
{
//get percentage from the database
$this->db->select_avg('score');
$this->db->where('id', $quiz);
$res = $this->db->get('userScoreQuiz');
if ($res->num_rows() != 1) {
// there should only be one row - anything else is an error
return false;
}
return $res->row()->score;
}
от документы:
$this->db->select_avg('age');
$query = $this->db->get('members'); // Produces: SELECT AVG(age) as age FROM members
заменить
echo $average_score['avg'];
в
print_r($average_score['avg'];
потому что это не одна переменная, то есть набор массива
codeigniter result_array () возвращает данные в виде массива. И индекс массива начинается с 0 индекса.
«$ average_score [‘avg’]» это должен быть неопределенный индекс. Попробуйте получить доступ к массиву результатов как $ average_score [‘avg’] [0] [‘score’], если вы не хотите изменять свою функцию.
если вы хотите избежать дополнительного индекса массива, тогда возвращайте результаты, используя row () вместо result_array ().