将 php 变量(数组)json_encode JavaScript 变量时的键排序

Key ordering when json_encode php variable (array) into javascript variable

本文关键字:变量 JavaScript 排序 encode json php 数组      更新时间:2023-09-26

当尝试将 php 数组变量json_encode javascript 变量时遇到问题:

var duration_options = <?=json_encode($duration_options)?>;
        var duration_options_items = '';
        $.each(duration_options,function(index, value) {
            if(init_act_duration == value){
                var selected_option = 'selected=selected';
                }else{
                var selected_option = '';
            }
            duration_options_items = duration_options_items + '<option value="'+index+'" '+selected_option+'>'+value+'</option>';
        });
        duration_options_items = '<select class="form-control select2 select_ajax select_ajax_duration" name="edit_activity_duration" style="width:100%">'+duration_options_items+'</select>';

PHP 数组是

    Array
(
    [0.5] => 0.5
    [1] => 1
    [1.5] => 1.5
    [2] => 2
    [2.5] => 2.5
    [3] => 3
    [3.5] => 3.5
    [4] => 4
)

json_encode后,当我在javascript中使用该json时,数组如下所示:

  Array
    (
        [1] => 1
        [2] => 2
        [3] => 3
        [4] => 4
        [0.5] => 0.5
        [1.5] => 1.5
        [2.5] => 2.5
        [3.5] => 3.5
    )

只是无法理解为什么,也不知道如何正确订购它们

您观察到此行为是因为数组不包含整数键和顺序键。因此,json_encode将其映射到 JSON 对象

我假设你认为JSON是错误的,但你还没有真正检查它(有几种方法可以做到这一点,例如浏览器开发人员工具中的Net窗格)。

一旦你从 JavaScript 解析它,它就变成了一个 JavaScript 对象。因此,不能保证键的顺序,因为这是 ECMAScript 规范定义对象的方式。

如果你需要防弹顺序,你需要切换到常规数组,即使用连续的从零开始的整数键。

这有什么问题,你有相同的密钥,所以你可以使用相同的密钥?似乎它按长度键排序,然后自然排序。

循环使用键时。