所以这是我的php文件代码
GetUserArray.php
$Users = array('7'=>'samei', '4'=>"chaya", '10'=>'abetterchutia');
echo json_encode($Users);
这是我的ajax请求
$.ajax({
url: './GetUserArray.php',
type: 'POST',
dataType: "json",
success: function(users) {
console.log(users);
$.each( users, function( key, value ) {
console.log(key, value);
});
}
});
现在它给我的是在控制台中是一个按照该数组的键排序的对象,而我想在我的php文件中使用7 4 10的orignal命令
Object {4: "chaya", 7: "samei", 10: "abetterchutia"}
4 chutiya
7 sali
10 abetterchutia
答案 0 :(得分:8)
使用散列图的问题在于它们实际上并未指定顺序。虽然,在PHP中,数组实际上是一个有序的hashmap,但它确实如此。将其转换为Javascript中的对象后,将不再保留该订单。保证Javascript顺序的唯一方法是使用数组。
因此在PHP中,这可以按预期工作并保留顺序。
$arr = [4 => "I'm first", 1 => "I'm second", 3 => "I'm third"];
foreach($arr as $value) {
echo $value, "\n";
}
这给了我们
I'm first I'm second I'm third
但是将其编码为Javascript Object Notation(即JSON)并且你得到一个对象,因为在Javascript数组中没有键,它们有索引。
echo json_encode($arr);
给我们......
{"4":"I'm first","1":"I'm second","3":"I'm third"}
如果您尝试在Javascript中使用此对象执行相同的操作,则可能无法获得相同的订单
var obj = {"4":"I'm first","1":"I'm second","3":"I'm third"};
var s = "";
for(var x in obj) {
s += + obj[x] + "\n";
}
document.write("<pre>" + s + "</pre>");
这可能会给你一些更像......
I'm second I'm third I'm first
所以解决这个问题的唯一方法就是使用数组......
json_encode(array_values($arr));
现在这给了我们......
["I'm first","I'm second","I'm third"]
订单维持。
但是,如果您还想保留密钥,则必须创建一个对象数组。
$json = [];
foreach($arr as $key => $value) {
$json[] = [$key => $value];
}
echo json_encode($json);
现在你得到......
[{"4":"I'm first"},{"1":"I'm second"},{"3":"I'm third"}]
在javascript中,按预期完美运行...
for(var x in obj) {
for(var n in obj[x]) {
obj[x][n]; // now you can both maintain order and have access to the key
}
}