【问题标题】:Key ordering when json_encode php variable (array) into javascript variablejson_encode php 变量(数组)转换为 javascript 变量时的键排序
【发布时间】:2016-04-21 10:14:56
【问题描述】:

当尝试将 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
)

当我在我的 javascript 中使用该 json 时,在 json_encode 之后,数组就像:

  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变成:...真的是Javascript数组吗?
  • 检查这个:- eval.in/557376 。它清楚地表明您在 json_encode 之前对您的数组进行了处理
  • 请编辑问题并发布您的代码。不要只是假设 PHP 坏了 ;-)
  • @Anant 不一定,只需将编码的 json 粘贴到浏览器控制台(在我的情况下为 chrome),您就会看到 reordered 版本。问题是,问题可能缺少 "when I use that json in my javascript..." 部分。
  • 就用json_encode(array_values($duration_options));吧,反正十进制键没有多大意义(键等于值)。

标签: javascript php arrays json encode


【解决方案1】:

您正在观察此行为,因为您的数组不包含整数 顺序键。因此,json_encode 将其映射到 JSON object

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      当你循环使用键时。

      【讨论】:

      • 我编辑了我的问题以查看我使用 json_encode php 变量来使用循环进行选择/选项下拉
      猜你喜欢
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2016-02-12
      • 1970-01-01
      相关资源
      最近更新 更多