我的模型中有下面的函数,它返回一个数据数组。我想对每一行进行另一次操作,并在返回结果之前将结果添加到数据数组中
function get_all_annonce()
{
$this->db->select(" * from annonce");
$this->db->order_by("annonce.DATEDEBUTANNONCE","asc");
$q=$this->db->get();
if($q->num_rows()>0)
{
foreach($q->result() as $row)
{
$data[]=$row;
//I try to add another result
$experience=$this->get_experience($row->NUMUSER);
$data['experience']=$experience;
}
return $data;
}
}
但是,当我尝试访问视图中的$experience
或$row->'experience'
时,出现了一个错误。我该怎么修?
$data
变量定义在错误的范围内。您在foreach循环中定义了它,但之后尝试返回它。尝试在foreach上方添加$data = Array();
。
除了上面的答案。首先,你有不必要的作业,你可以在一行中完成。第二个-当您使用[]时,它将自动创建索引,并且该行将作为数组添加到该索引中。您得到一个多维数组(0=>结果1,1=>结果2等)。
如果要将"experience"键添加到结果中,则不能将其直接添加到数据中。
你得到一个数组,它将有键0,1,2,3,4…'经验'作为最后一个键-每次它都被覆盖。
一种方法是使用一个变量作为关键字(或者使用循环):
$i = 0;
foreach($q->result() as $row)
{
$data[$i]=$row;
$data[$i]['experience'] = $this->get_experience($row->NUMUSER);
}
如果两者都只使用[],那么每次迭代都会为每个键分配不同的键。