You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:28:50