防止json_encode关联数组排序

rba*_*kar 9 php json associative-array

我有一个关联数组

Array(
   [289] => Array(
    'name'=> 'One'
   ),
   [292] => Array(
    'name'=> 'One'
   ),
   [290] => Array(
    'name'=> 'One'
   )
)
Run Code Online (Sandbox Code Playgroud)

我在这个数组上使用json_encode之后.键被排序,虽然我把它作为JSON对象.

有办法防止这种行为吗?

Zim*_*m84 5

没有标准说它必须按照一定的顺序.

请参阅此相关问题:如何通过Index ASC阻止Chrome和Opera对JSON对象进行排序?

注意:我们正在谈论PHP函数,但结果基本上是javascript,因此关于不存在的标准的声明也适用.

顺便说一下:我用以下代码测试了它.PHP本身似乎没有对数组进行排序,firefox也没有(根据firebug控制台).

<pre>
<?php
    $array = array();
    $array[289] = array('name'=>'One');
    $array[292] = array('name'=>'One');
    $array[290] = array('name'=>'One');
    print_r($array);
    $string = json_encode($array);
    print_r($string);
?>
</pre>
<script>
    var foo = <?=$string?>;
    console.log(foo);
</script>
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.如果您想要自己的订单,请为数组提供您自己的索引. (2认同)
  • 注意:如果键是数字且键值在500以下,firefox将对键进行排序。不能保证Javascript对象具有顺序,这是很多人的错误,大多数语言关联数组都不按条目进行排序。如果要订购,请使用有序阵列。https://bugzilla.mozilla.org/show_bug.cgi?id=865760 (2认同)