CodeIgniter:无法解析数组问题求助(附数据获取代码)
我一眼就看出问题所在了——你的getdiningdata()函数没有返回处理好的数据!这就导致你在dinewithus()里调用它时,$data['sensi']拿到的根本不是预期的数组,自然会出现无法解析的问题。
修复步骤:
1. 给getdiningdata()添加返回语句
修改后的函数应该是这样的:
function getdiningdata($type){ $rest[$type]= $this->db->get_where('dining',array( 'type'=> $type ))->result(); foreach ($rest[$type] as $value){ $value->images = $this->db->get_where('diningattachments',array( 'diningid' => $value->id ) )->result(); } // 关键:把处理好的数组返回出去 return $rest[$type]; }
原来的函数只完成了数据查询和关联图片的操作,但最后没有用return把结果传递给调用它的地方,所以$data['sensi']得到的是null,不是数组。
2. 验证控制器中的赋值
你的dinewithus()函数不需要大改,现在拿到返回的数组后,就能正常传递给视图了:
function dinewithus(){ $data['sensi']= $this->getdiningdata('sensi'); $this->load->view('front/dine',$data); }
额外优化建议(可选)
你现在的写法会导致N+1次数据库查询——查1次dining数据,然后循环里每条数据查1次图片,数据量多的时候效率会很低。可以用CodeIgniter的JOIN查询来合并成1次查询,比如:
function getdiningdata($type){ // 关联查询dining和diningattachments表 $this->db->select('d.*, da.*'); $this->db->from('dining d'); // 左连接,确保没有图片的dining数据也能被查到 $this->db->join('diningattachments da', 'd.id = da.diningid', 'left'); $this->db->where('d.type', $type); $query = $this->db->get(); // 手动整理数据,把同一dining的图片归到对应的images属性下 $diningList = []; foreach ($query->result() as $row) { if (!isset($diningList[$row->id])) { // 初始化这条dining数据 $diningList[$row->id] = $row; $diningList[$row->id]->images = []; } // 如果有对应的图片,添加到images数组中 if (!empty($row->id)) { // 这里根据diningattachments的实际字段调整,比如主键id $diningList[$row->id]->images[] = $row; } } // 把关联数组转成索引数组返回 return array_values($diningList); }
这样只需要1次数据库查询,性能会好很多。
内容的提问来源于stack exchange,提问作者Sikander
相关产品推荐
相关产品推荐

