簡體   English   中英

保持關聯PHP數組的順序,同時通過ajax將其傳遞給javascript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM