1

我在 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 循环不是问题,因为它不会给我任何错误,只有控制器中的那个会。任何提示将不胜感激。预先感谢!

4

2 回答 2

1

所以,经过大量的寻找,我发现了我的问题,并决定把它放在这里,以防有人遇到同样的问题。基本上,事实证明我在问题中发布的那个循环中有一些嵌套的 foreach 循环,所以我有这样的代码:

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

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

于 2013-03-07T01:42:23.813 回答
0

当变量不是数组时,为 foreach 循环提供了无效参数。在使用 foreach 循环之前添加检查

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

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

检查result_array的返回值是什么

于 2013-03-06T23:27:15.560 回答