json_将php变量(数组)编码为javascript变量时的键顺序
当尝试将php数组变量编码为javascript变量时,会出现以下问题:json_将php变量(数组)编码为javascript变量时的键顺序,javascript,php,arrays,json,encode,Javascript,Php,Arrays,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 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>';
在json_编码之后,当我在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\u encode
将其映射到一个json对象您正在观察这种行为,因为您的数组不包含整数键和顺序键。因此,json\u encode
将其映射到一个json对象我假设您认为json是错误的,但您没有真正检查它(有几种方法可以这样做,例如浏览器开发工具中的网络窗格)
一旦您从JavaScript解析它,它就会变成一个JavaScript对象。因此,不能保证键的顺序,因为ECMAScript规范就是这样定义对象的
如果您需要防弹命令,您需要切换到常规的数组,即使用连续的基于零的整数键。我假定您假设JSON是错误的,但您没有真正检查它(有几种方法可以这样做,例如浏览器开发工具中的“网络”窗格) 一旦您从JavaScript解析它,它就会变成一个JavaScript对象。因此,不能保证键的顺序,因为ECMAScript规范就是这样定义对象的
如果您需要防弹命令,则需要切换到常规的数组,即使用连续的基于零的整数键。在json_encode变为:。。。这真的是一个Javascript数组吗?请检查:-。它清楚地表明,在
json\u encode
之前,您正在对数组进行处理。请编辑问题并发布代码。不要仅仅假设PHP是坏的;-)@不一定,只需将编码的json粘贴到浏览器控制台(在我的例子中是chrome),您就会看到重新排序的版本。问题是,问题可能缺少了“当我在javascript中使用json时…”部分代码>,十进制键无论如何没有多大意义(键等于值)。。。这真的是一个Javascript数组吗?请检查:-。它清楚地表明,在json\u encode
之前,您正在对数组进行处理。请编辑问题并发布代码。不要仅仅假设PHP是坏的;-)@不一定,只需将编码的json粘贴到浏览器控制台(在我的例子中是chrome),您就会看到重新排序的版本。问题是,问题可能缺少了“当我在javascript中使用json时…”部分代码>,十进制键无论如何都没有多大意义(键等于值)。我编辑了我的问题,以查看我使用json_encode php变量通过循环创建select/option下拉列表我编辑了我的问题,以查看我使用json_encode php变量通过循环创建select/option下拉列表
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
)