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

如何自定义调整Laravel QueryBuilder返回结果的数组排列顺序

Laravel调整查询结果数组键顺序的实现方法

无需编写复杂的自定义函数,使用Laravel自带的集合方法结合PHP原生数组操作即可快速实现需求,具体方案如下:


步骤1:定义期望的键顺序

首先按照你需要的排列顺序,提前定义好键名列表:

$desiredKeys = [
    'outsourcer',
    'manager_name',
    'worker_name',
    'sesnum1',
    'sesnum2',
    'start',
    'end',
    'work',
    'quarter',
    'working_period',
    'reserve1',
    'cost',
    'worktime_l',
    'worktime_h',
    'cost_add',
    'cost_trip',
    'cost_trip_terms',
    'cost_midnight',
    'cost_reduced',
    'reserve2',
    'end_date'
];

步骤2:按顺序重组数组

场景1:处理多条查询结果(QueryBuilder调用get()返回的集合)

// 你的原始查询逻辑
$originalData = DB::table('你的表名')->where('你的条件')->get();

$sortedData = $originalData->map(function ($item) use ($desiredKeys) {
    // 将对象转为数组
    $itemArr = (array)$item;
    $sortedItem = [];
    // 按指定顺序填充数组
    foreach ($desiredKeys as $key) {
        $sortedItem[$key] = $itemArr[$key];
    }
    return $sortedItem;
});

场景2:处理单条查询结果(QueryBuilder调用first()返回的对象)

// 你的原始查询逻辑
$originalItem = DB::table('你的表名')->where('你的条件')->first();

$itemArr = (array)$originalItem;
$sortedItem = [];
foreach ($desiredKeys as $key) {
    $sortedItem[$key] = $itemArr[$key];
}

简化写法

可以用PHP原生array_replace方法替代循环,代码更简洁:

// 单条场景替换逻辑
$sortedItem = array_replace(array_flip($desiredKeys), (array)$originalItem);

// 多条场景替换逻辑
$sortedData = $originalData->map(fn($item) => array_replace(array_flip($desiredKeys), (array)$item));

复用封装(可选)

如果多个业务场景都需要用到这个键排序逻辑,可以将其封装为集合宏,在app/Providers/AppServiceProvider.php的boot方法中添加以下代码:

use Illuminate\Support\Collection;

public function boot()
{
    Collection::macro('sortByCustomKeyOrder', function (array $desiredKeys) {
        return $this->map(fn($item) => array_replace(array_flip($desiredKeys), (array)$item));
    });
}

后续使用时直接调用即可:

$sortedData = $originalData->sortByCustomKeyOrder($desiredKeys);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:36:02