PHP数组操作,为foreach()提供的无效参数

时间:2013-03-06 23:12:43

标签: php codeigniter foreach

我在PHP中的codeigniter中设置了一个MVC结构。但是,出于某种原因,我的模型结果不喜欢被人嘲笑,给我; Invalid argument supplied for foreach()。这是我的模型的粗略代码:

class some_model extends CI_Model
{
    function __construct()
    {
        // Call the Model constructor
        $this->load->database();
    }

    function some_func()
    {
       //Prepare return
       $return = array();

       //Do query
       $query = $this->db->query('SELECT tbl.* from tbl');

       //Get array of values
       $result = $query->result_array();

       foreach($result as $row)
       {
           $return[] = array(

               'a'                    => $row['a'],
               'b'                    => $row['b'],
               'c'                    => $row['c']
           );
       }

    return $return;
}

控制器:

$this->load->model('some_model');
$stuff = $this->some_model->some_func();

foreach($stuff as $row)
{
   //Do something
}

但是我总是在控制器的foreach循环中出错。有没有人知道为什么会发生这种情况?我已经检查过,PHP确实将$stuff看作一个数组(is_array($stuff)返回true),所以我不知道会发生什么。我知道模型中的foreach循环不是问题,因为它不会给我任何错误,只有控制器中的错误。任何提示将不胜感激。先谢谢!

2 个答案:

答案 0 :(得分:1)

所以,在经历了很多根深蒂固之后,我发现了我的问题,并决定把它放在这里以防有人遇到同样的问题。基本上,事实证明我在问题中发布了一个嵌套的foreach循环,所以我有这样的代码:

foreach($stuff1 as $row)
{
   foreach($stuff2 as $row2)
   {
      //Some code
   }
}

我的错误发生在我的第二个(嵌套)foreach中,但由于某种原因,PHP给了我一个错误,好像它是在第一个(带有行号和所有内容)中发生的。我唯一能够解决这个问题的事实是,错误打印的次数与$stuff1中的行数相同......有人可以就PHP的错误行报告功能评论此行为吗?谢谢!

答案 1 :(得分:0)

当变量不是数组时,提供

foreach循环的无效参数。在使用foreach循环之前添加检查

if (is_array($stuff)) {...foreach loop...}

并且你确定它的错误部分是$ stuff部分吗?也许它的 $ result 以某种方式保存查询返回的非数组值。

检查 result_array

的返回值是什么