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

Laravel中按order子键排序JSONB对象的问题排查

问题分析

你的排序代码未生效的核心原因是:你在fieldData的顶层遍历查找section_开头的键,但实际所有section_xxx区块都嵌套在tab_patient、tab-admission这类tab子对象内部,原代码根本没定位到需要排序的目标区块。

修正后的代码
class FieldSettingResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        $fieldData = $this->field_data;

        // 遍历每个tab对象
        foreach ($fieldData as $tabKey => $tabContent) {
            // 跳过非数组格式的tab内容(容错判断)
            if (!is_array($tabContent)) {
                continue;
            }

            // 拆分tab内的section区块和其他属性
            $sections = [];
            $nonSections = [];
            foreach ($tabContent as $key => $value) {
                if (strpos($key, 'section_') === 0) {
                    $sections[$key] = $value;
                } else {
                    // 保留tab的原有属性(如label、show)
                    $nonSections[$key] = $value;
                }
            }

            // 按order字段对section排序,兼容order不存在的情况
            uasort($sections, function ($a, $b) {
                $orderA = $a['order'] ?? PHP_INT_MAX;
                $orderB = $b['order'] ?? PHP_INT_MAX;
                return $orderA <=> $orderB;
            });

            // 重组tab内容:先放原有属性,再放排序后的sections
            $fieldData[$tabKey] = array_merge($nonSections, $sections);
        }

        return [
            'id'         => (string)$this->id,
            'name'       => $this->name,
            'field_data' => $fieldData,
        ];
    }
}
关键说明
  • 新增tab层级遍历,准确定位到section所在的嵌套层级
  • 拆分并重组tab内容,保证tab原有属性不丢失,同时让排序后的section按顺序排列
  • 增加order字段不存在的容错处理,避免数据异常导致的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:47:31