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

时间:2015-11-02 08:36:21

标签: rest yii2

我有这样的自定义休息动作(在扩展yii / rest / ActiveController的类中):

public function actionTest()
{        
    return ["9" => "Nine", "1" => "one"];
}

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

{
    "1": "One"
    "9": "Nine",
}

我想以原始(预期)顺序提供它......

似乎数组在操作中返回数组之后被某个地方排序,但我无法弄清楚在哪里。这仅在数组键是整数时发生,像这样的数组按预期排序:

["id-9" => "Nine", "id-1" => "one"]

尝试过使用ArrayDataProvider设置' sort' = false,但没有区别。

1 个答案:

答案 0 :(得分:2)

由于您将其作为json导出并查看,从这个问题 - Keeping dictionary keys of JSON Object in order in Objective CHenning Makholm留下的答案说:

  

在JSON对象中,根据定义,键值对的顺序没有意义。该规范允许JSON生成器以任何方式置换它们,即使是随机的 - 并且不需要解析器来保留排序。 RFC 4627说:

     

对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串,数字,布尔值,空值,对象或数组。

所以json没有排序,因为它使用字典作为其数据结构,并且通常字典将没有隐式或显式排序,因为它们散列键以便快速访问。

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

解决此问题的一种方法是转移到保留订单的不同数据结构。