【问题标题】:Array to string conversion error in CodeigniterCodeigniter 中的数组到字符串转换错误
【发布时间】:2016-01-07 13:27:03
【问题描述】:

我正在尝试将平均结果从数据库显示到视图,但我不断收到此错误:

遇到了 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> 

我不知道为什么会这样。

感谢你们的帮助。

【问题讨论】:

  • 您的函数正在返回一个数组 return $res-&gt;result_array();$average_score['avg'] 是一个数组,说明您收到此错误的原因
  • print_r($average_score) 并检查其值
  • 而不是这个返回false;传递返回数组();并在必要时检查isset()

标签: php codeigniter average


【解决方案1】:

你写的代码太多了,这是一个优雅的解决方案:

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访问

【讨论】:

  • 唯一的问题是我需要将测验和分数的数据传递给视图
  • 我确实像你说的那样没有错误了,只是即使分数在数据库中也没有显示平均值
  • @Nynaeve 用我的代码你只有 3 个变量 $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;
}

来自docs

$this->db->select_avg('age');
$query = $this->db->get('members'); // Produces: SELECT AVG(age) as age FROM members

【讨论】:

  • 我不再收到错误,但视图中没有显示分数,即使它在表格中
  • 您可以从 phpmyadmin 或其他地方进行查询吗?
  • select avg(score) from userScoreQuiz where id=**yourid**
  • 我这样做了,我注意到查询中有一个错误,这就是为什么视图中没有显示结果,感谢您的帮助
【解决方案3】:

替换

echo $average_score['avg'];

print_r($average_score['avg'];

因为不是一个变量,而是一组数组

【讨论】:

  • 它将打印数组而不是期望的结果。
  • 但是我们不知道期望的结果是什么,那么只有我给出了那个解决方案。如果用户看到数组集,那么他就得到了那个解决方案。
  • 这明显是平均分Avg. score on all previous attempts: &lt;?php echo $average_score['avg'] ?&gt;
【解决方案4】:

codeigniter result_array() 以数组形式返回数据。并且数组索引从 0 索引开始。

"$average_score['avg']" 这应该是未定义的索引。如果您不想更改函数,请尝试以 $average_score['avg'][0]['score'] 的形式访问结果数组。

如果你想避免额外的数组索引,那么使用 row() 代替 result_array() 返回结果。

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 2023-03-11
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多