我有一个像这样的自定义rest操作(在扩展yii/rest/ActiveController的类中):
public function actionTest()
{
return ["9" => "Nine", "1" => "one"];
}调用API时,数组输出的顺序是相反的,即:
{
"1": "One"
"9": "Nine",
}我想把它按原(预期)顺序.
似乎数组在操作中返回后的某个位置被排序了,但是我不知道在哪里。只有当数组键是整数时才会发生这种情况,这样的数组按预期排序:
["id-9" => "Nine", "id-1" => "one"]尝试使用ArrayDataProvider设置‘排序’= false,但这没有什么区别。
发布于 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输出没有这样的保证。
解决这一问题的一种方法是移动到保留顺序的不同数据结构。
https://stackoverflow.com/questions/33473558
复制相似问题