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

PHP中期望返回对象数组却得到嵌套数组的技术问题

解决PHP中对象数组变为嵌套数组的问题

嘿,我看了你的代码,问题其实出在Controller里的数组拼接逻辑上。你的Model方法search_sessions_by_activity返回的已经是对象数组了(因为$query->result()默认返回的就是包含对象的数组),但你在循环里直接把这个完整的数组追加到$activity_session里,这就导致最终得到的是「数组套数组」的嵌套结构,而不是你想要的扁平对象数组。

修复方案1:逐个追加对象(最直观)

把Controller里的循环改成遍历每个活动返回的session数组,将单个对象逐个加入目标数组:

$activity_session = array(); 
foreach($activities_by_category as $activity) { 
    // 获取当前活动对应的session对象数组
    $sessions = $this->users_model->search_sessions_by_activity($activity->activity_id);
    // 把每个session对象单独加到目标数组里
    foreach($sessions as $session) {
        $activity_session[] = $session;
    }
}

修复方案2:用array_merge合并数组

如果不想写嵌套循环,也可以用array_merge把每次返回的session数组合并到目标数组中:

$activity_session = array(); 
foreach($activities_by_category as $activity) { 
    $sessions = $this->users_model->search_sessions_by_activity($activity->activity_id);
    // 合并两个数组,自动扁平化结构
    $activity_session = array_merge($activity_session, $sessions);
}

修复方案3:PHP 7.4+用spread运算符(最简洁)

如果你的PHP版本是7.4及以上,用spread运算符可以一行搞定数组的扁平化追加:

$activity_session = array(); 
foreach($activities_by_category as $activity) { 
    // 用...把内层数组的元素展开后追加
    $activity_session[] = ...$this->users_model->search_sessions_by_activity($activity->activity_id);
}

这几种方法都能让$activity_session变成你想要的扁平对象数组,返回的JSON自然也就不是嵌套结构了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:48:48