Laravel-排序后从Collection响应JSON将项目索引作为对象键

时间:2018-07-12 19:24:22

标签: php json laravel

我不知道是什么原因引起的,但是下面是使用所需JSON格式生成的原始PHP代码:

PHP

return response()->json($model->things, 200);

JSON

[
    {...},
    {...},
    ...
]

但是,当我对集合进行排序时,JSON中的数组变成了一个对象。

PHP

return response()->json($model->things->sortBy("name"), 200);

JSON

{
    "0": {...},
    "1": {...},
    ...
}

我做错了吗?我尝试在这两种情况下dd对集合进行处理,但结果对我来说都是相同的。

1 个答案:

答案 0 :(得分:5)

从laravel文档中:

  

sortBy方法按给定键对集合进行排序。排序后的集合保留原始数组键

因此在sortBy()之后,您将得到以下内容:

[2=>'val1', 1 => 'val2', 0 => 'val3']

它是关联数组,这解释了为什么在json中它成为对象,并且要防止这种情况,您需要使用values()方法,如下所示:

$model->things->sortBy("name")->values()->all()

第二个问题是为什么它没有排序,因此您可以阅读以下问题:json_encode not preserving order