Laravel return (response ) JSON 数组为什么会帮我排序了?我的目的是不要帮我排序,按我数据库排好的就行
大家好,我最近发现一个问题,laravel接口返回自动帮我将数组按升序排序了,其实我不要升序排序,而是按我从数据库里面排好的顺序返回就行。
单独测试数组返回结果也是这样,到底laravel返回在哪里帮我排了序,我该怎么处理才能让其不排序呢?
测试样例如下:
public function testjson()
{
$data = array(6=>"中国",5=>"美国",4=>"日本",1=>"俄罗斯",2=>"英国",);
// dd($data);
$data1 = Response::send(0,'成功!',$data);
dd($data1);
return Response::send(0,'成功!',$data);
}
dd($data);返回的结果如下:
array:5 [
6 => "中国"
5 => "美国"
4 => "日本"
1 => "俄罗斯"
2 => "英国"
]
dd($data1);返回的结果如下:(仍然是我期望的结果)
JsonResponse {#560
#data: "{"state":0,"msg":"\u6210\u529f\uff01","data":{"6":"\u4e2d\u56fd","5":"\u7f8e\u56fd","4":"\u65e5\u672c","1":"\u4fc4\u7f57\u65af","2":"\u82f1\u56fd"}}"
return 之后的结果如下:(不是我期望的结果了,按了键的升序排序)
state 0
msg 成功!
data {…}
1 俄罗斯
2 英国
4 日本
5 美国
6 中国
网上说在每个数字key前面加个空格字符串即可。这样试了,果然可以。
暂时就这样解决啦!
我没找到
Response::send()
这个方法,我试了下response()->json()
是正常的。@likunyan 那个是我重写了Response类的方法,实际内部也是调用response()->json() 这个方法。我上面到这一步还是正确。最后的return就不正确了。网上说json_encode都会这样,我单独测试纯php也发现这个问题,那就应该不是laravel的问题了。
你试试
返回成 对象的话就会保持原来的顺序,如果是纯数组就会自动排序。 虽然我也不太清楚是什么原因
@Epona 这样做了,没有变化,还是老样子。
可能是php版本问题吧
加空格有时会出问题,比如前端去除了首尾空格的情况下。
可以随便加些什么英文字符,把数字转换成字符串,只要不用数字作key就行。