我有json_encode($array)
它在Google Chrome上以不同的顺序为我提供了一个列表
答案 0 :(得分:1)
编码由PHP在后端完成,因此Google Chrome与此问题无关。
在编码之前检查数组顺序。
答案 1 :(得分:1)
array_reverse:用于以相反的顺序返回包含元素的数组,例如:
$array = array_reverse($array);
echo json_encode($array,JSON_UNESCAPED_UNICODE);
答案 2 :(得分:0)
使用$array
检查var_dump
中的值,以确保这是您想要的顺序。
修改:查看manual
中的第3个示例答案 3 :(得分:0)
您的JSON数据是什么样的?如果:
{1,2,3}
您的浏览器不一定会保留订单。但如果格式化为JSON数组:
[1,2,3]
然后订单将被保留。
答案 4 :(得分:0)
如果数组是关联数组,但由整数索引(如$arr1 = ['3' => 'x', '2' => 'a', '1' => 'b'];
),则浏览器(在解析JSON时)假定数组的键指示值的存储顺序(如经典,非关联数组-如$arr2 = ['x','a','b'];
)。
自己看看-比较解析从这两个关联数组生成的JSON的结果-一个由非整数字符串(A)索引,另一个由整数索引(即使它们在PHP中是字符串类型的) )(B)。
对于两个示例,PHP中的值均按以下顺序存储:'x', 'a', 'b'
,并且只有键是不同的。
A)关联数组,由字符串索引
<?php
$arr1 = [
'foo' => 'x',
'bar' => 'a',
'baz' => 'b'
];
$json = json_encode($arr1); // $json is now a string: '{"foo":"x","bar":"a","baz":"b"}'
然后,在浏览器中:
var jsonData = JSON.parse('{"foo":"x","bar":"a","baz":"b"}');
console.log(jsonData);
// prints {foo: "x", bar: "a", baz: "b"} - the keys are in different order then expected!
B)关联数组,由整数索引(即使它们在PHP中是字符串!)
<?php
$arr1 = [
'3' => 'x',
'2' => 'a',
'1' => 'b'
];
$json = json_encode($arr1); // $json is now a string: '"{"3":"x","2":"a","1":"b"}"'
然后,在浏览器中:
var jsonData = JSON.parse('"{"3":"x","2":"a","1":"b"}"');
console.log(jsonData);
// prints {1: "b", 2: "a", 3: "x"} - the keys are in different order then expected!
如您所见-JSON解析器假设经典数组 索引是整数。
因此,如果您需要维护顺序,建议您切换到经典数组,并在JSON中添加一个order / key字段(出于排序目的-如果需要):
$arr1 = [
'3' => 'x',
'2' => 'a',
'1' => 'b'
];
$json = json_encode(array_values($arr1)); // note the array_values() here - but this way you loose the index keys
另一种方式:
$arr1 = [
'3' => [ 'key' => '3', 'value' => 'x'],
'2' => [ 'key' => '2', 'value' => 'a'],
'1' => [ 'key' => '1', 'value' => 'b'],
];
$json = json_encode(array_values($arr1));
// this way you have both values and keys,
// and the parsed JSON will be in the exact order you want it to be