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