-2

我有json_encode($array)它在谷歌浏览器上以不同的顺序给了我一个列表

4

5 回答 5

2

array_reverse:用于返回一个元素以相反顺序排列的数组,例如:

$array = array_reverse($array);
echo json_encode($array,JSON_UNESCAPED_UNICODE);
于 2016-07-30T11:25:22.017 回答
1

编码由 PHP 在后端完成,因此 Google Chrome 与此问题无关。

在编码之前检查您的数组顺序。

于 2012-10-23T16:26:31.467 回答
0

检查$array使用中的值var_dump以确保这是您想要的顺序。

编辑:查看手册中的第三个示例

于 2012-10-23T16:24:44.540 回答
0

您的 JSON 数据是什么样的?如果:

{1,2,3}

您的浏览器不一定会保留订单。但如果格式化为 JSON 数组:

[1,2,3]

然后订单将被保留。

于 2014-09-05T04:59:57.007 回答
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
于 2018-09-11T07:09:16.113 回答