我有这样的自定义休息动作(在扩展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,但没有区别。
答案 0 :(得分:2)
由于您将其作为json导出并查看,从这个问题 - Keeping dictionary keys of JSON Object in order in Objective C,Henning Makholm留下的答案说:
在JSON对象中,根据定义,键值对的顺序没有意义。该规范允许JSON生成器以任何方式置换它们,即使是随机的 - 并且不需要解析器来保留排序。 RFC 4627说:
对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串,数字,布尔值,空值,对象或数组。
所以json没有排序,因为它使用字典作为其数据结构,并且通常字典将没有隐式或显式排序,因为它们散列键以便快速访问。
可能是程序中的实际底层表示是有序的,但json输出没有这样的保证。
解决此问题的一种方法是转移到保留订单的不同数据结构。