You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP REST API数组返回异常:值被覆盖且会话数组为空

问题分析与解决方案

看起来你遇到了两个核心问题:一是循环中变量被覆盖导致只返回最后一个活动的会话,二是会话数组为空(大概率和第一个问题相关,也可能模型查询存在逻辑问题)。咱们一步步来修复:

核心问题1:循环逻辑错误

你的foreach循环没有添加花括号{},这意味着只有$activity_id = $activity->activity_id;这一行会被循环执行,而后面的$data['activity_session'] = ...只会在循环结束后执行一次。最终$activity_session只会存储最后一个活动的会话数据——如果最后一个活动没有会话,自然就返回空数组了。

核心问题2:会话数据未与对应活动关联

你需要把每个活动的会话数据和活动本身绑定,或者单独整理成一个以活动ID为键的数组,这样前端才能对应上每个活动的会话信息。

修正后的代码

下面是调整后的完整代码,我标注了关键修改点:

function get_all_activity_by_category(){ 
    $id = $this->input->get('id'); 
    $data['activity_category'] = $this->users_model->single_activity_category($id); 
    $activity_category = $data['activity_category']; 
    $data['activities_by_category'] = $this->users_model->list_of_activities($id); 
    $activities_by_category = $data['activities_by_category']; 

    // 初始化数组,存储每个活动的会话(以活动ID为键)
    $activity_sessions = [];

    // 给foreach加上花括号,确保循环内代码每次都执行
    foreach($activities_by_category as $activity) {
        $activity_id = $activity->activity_id;
        // 将每个活动的会话按ID存入数组
        $activity_sessions[$activity_id] = $this->users_model->search_sessions_by_activity($activity_id);
        
        // 可选优化:把会话直接附加到活动对象中,前端可通过activity.session直接获取
        // $activity->session = $this->users_model->search_sessions_by_activity($activity_id);
    }

    header('Access-Control-Allow-Origin: *'); 
    header('Content-Type: application/json'); 
    return $this->output 
        ->set_content_type('application/json') 
        ->set_status_header(200) 
        // 返回整理好的会话数组
        ->set_output(json_encode(
            array(
                'activity_category'=>$activity_category,
                'activity'=>$activities_by_category,
                'activity_session'=>$activity_sessions
            ),
            JSON_UNESCAPED_SLASHES
        )); 
}

额外排查点(如果仍返回空数组)

如果调整后会话数组依然为空,你需要检查:

  • 确认search_sessions_by_activity模型方法是否正确接收$activity_id参数,SQL查询是否存在拼写错误(比如字段名、表名)或WHERE条件逻辑错误
  • 手动在数据库中执行查询,确认对应活动ID确实存在会话数据
  • 可以在循环中临时添加var_dump($activity_id);var_dump($this->users_model->search_sessions_by_activity($activity_id));,查看每次查询的结果是否符合预期

内容的提问来源于stack exchange,提问作者Raza Barlas

火山引擎 最新活动