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
相关产品推荐
相关产品推荐

