首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用返回数组的排序?

如何禁用返回数组的排序?
EN

Stack Overflow用户
提问于 2015-11-02 08:36:20
回答 1查看 1.1K关注 0票数 1

我有一个像这样的自定义rest操作(在扩展yii/rest/ActiveController的类中):

代码语言:javascript
复制
public function actionTest()
{        
    return ["9" => "Nine", "1" => "one"];
}

调用API时,数组输出的顺序是相反的,即:

代码语言:javascript
复制
{
    "1": "One"
    "9": "Nine",
}

我想把它按原(预期)顺序.

似乎数组在操作中返回后的某个位置被排序了,但是我不知道在哪里。只有当数组键是整数时才会发生这种情况,这样的数组按预期排序:

代码语言:javascript
复制
["id-9" => "Nine", "id-1" => "one"]

尝试使用ArrayDataProvider设置‘排序’= false,但这没有什么区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-02 12:02:54

由于您是以json的形式导出它的,因此,从这个问题-- Keeping dictionary keys of JSON Object in order in Objective C中可以看出,Henning Makholm留下的答案是:

在JSON对象中,根据定义,键值对的顺序是没有意义的。该规范允许JSON生成器任意更改它们,即使是随机的--并且不需要解析器来保持顺序。RFC 4627说: 对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串、数字、布尔值、null、对象或数组。

因此,json没有排序,因为它使用字典作为其数据结构,而且字典通常不会有隐式或显式排序,因为它们散列键以实现快速访问。

您的程序中的实际底层表示可能是有序的,但是json输出没有这样的保证。

解决这一问题的一种方法是移动到保留顺序的不同数据结构。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33473558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档