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   中国
附言 1  ·  4年前

网上说在每个数字key前面加个空格字符串即可。这样试了,果然可以。
暂时就这样解决啦!

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6

我没找到 Response::send() 这个方法,我试了下 response()->json() 是正常的。

4年前 评论

@likunyan 那个是我重写了Response类的方法,实际内部也是调用response()->json() 这个方法。我上面到这一步还是正确。最后的return就不正确了。网上说json_encode都会这样,我单独测试纯php也发现这个问题,那就应该不是laravel的问题了。

4年前 评论
Epona

你试试

return collect($data)->values();

返回成 对象的话就会保持原来的顺序,如果是纯数组就会自动排序。 虽然我也不太清楚是什么原因

4年前 评论

@Epona 这样做了,没有变化,还是老样子。

4年前 评论

file
可能是php版本问题吧

4年前 评论

加空格有时会出问题,比如前端去除了首尾空格的情况下。
可以随便加些什么英文字符,把数字转换成字符串,只要不用数字作key就行。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!