当json_encode将php变量(数组)转换为javascript变量时的键排序

时间:2016-04-21 10:14:56

标签: javascript php arrays json encode

当尝试将json_encode的php数组变量转换为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
    )

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

3 个答案:

答案 0 :(得分:2)

您正在观察此行为,因为您的数组不包含整数顺序键。因此,$scope.resultsGrid.onRegisterApi = function(gridApi) { //set gridApi on scope $scope.gridApi = gridApi; //expand all rows when loading the grid, otherwise it will only display the totals only $scope.gridApi.grid.registerDataChangeCallback(function() { $scope.gridApi.treeBase.expandAllRows(); }); }; 将其映射到JSON 对象

答案 1 :(得分:1)

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

只要您从JavaScript解析它,就会变成JavaScript 对象。因此,不保证键的顺序,因为这是ECMAScript规范定义对象的方式。

如果您需要防弹订单,则需要切换到常规数组,即使用连续的从零开始的整数键。

答案 2 :(得分:0)

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

循环使用键时。