当尝试将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
)
无法理解为什么,也不知道如何正确订购
答案 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)
这有什么问题,你有相同的键,所以你可以使用它们相同?它似乎按长度键然后自然排序。
循环使用键时。