Ошибка преобразования массива в строку в Codeigniter

Я пытаюсь отобразить средний результат из базы данных в представление, но я получаю эту ошибку:

Обнаружена ошибка 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>

Я не могу понять, почему это так.

Спасибо за вашу помощь, ребята.

0

Решение

Это слишком много кодирования, которое вы получили, вот элегантное решение:

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

2

Другие решения

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
3

заменить

echo $average_score['avg'];

в

print_r($average_score['avg'];

потому что это не одна переменная, то есть набор массива

0

codeigniter result_array () возвращает данные в виде массива. И индекс массива начинается с 0 индекса.

«$ average_score [‘avg’]» это должен быть неопределенный индекс. Попробуйте получить доступ к массиву результатов как $ average_score [‘avg’] [0] [‘score’], если вы не хотите изменять свою функцию.

если вы хотите избежать дополнительного индекса массива, тогда возвращайте результаты, используя row () вместо result_array ().

0
По вопросам рекламы [email protected]