[英]Preserving order of an associative PHP array while passing it to javascript through ajax
所以這是我的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
使用散列圖的問題在於它們實際上並未指定順序。 雖然,在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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.