簡體   English   中英

如何在ajax調用后在javascript上以相同的順序顯示數組id和名稱值?

[英]How to get array id and name values display in the same order on javascript after ajax call?

我在 php 中有一個數組,如下所示:

    if(count($rows)) {
    $new = array();
    foreach($rows as $row) {
        $new[$row['id']] = $row['sel_date']." - ".date('l',$row['date_timestamp']);     
        //$myobj->id = $row['id'];
    }
}

現在在 php 頁面上,我有兩個選項可以將我的數組傳遞回 javascript ajax 功能:

print_r($new) 或 echo json_encode($new)

但是,當我使用 json_encode($new) 從 php 頁面發送到 javascript 頁面時,它丟失了 php 數組鍵的順序。 例如,我的 php 新數組如下所示:

Array
(
[71] => 07/09/2019 - Saturday
[81] => 08/09/2019 - Sunday
[83] => 09/09/2019 - Monday
[84] => 10/09/2019 - Tuesday
[72] => 15/09/2019 - Sunday
[73] => 16/09/2019 - Monday
[74] => 17/09/2019 - Tuesday
[75] => 18/09/2019 - Wednesday
)

現在在 javscript 方面,如果我使用 JSON.parse(data) 那么順序將如下所示

Array
(
[71] => 07/09/2019 - Saturday
[72] => 15/09/2019 - Sunday
[73] => 16/09/2019 - Monday
[74] => 17/09/2019 - Tuesday
[75] => 18/09/2019 - Wednesday
[81] => 08/09/2019 - Sunday
[83] => 09/09/2019 - Monday
[84] => 10/09/2019 - Tuesday

)

當 json.parse 重新排列 php 數組的順序時,我不希望發生這種情況。

那么我應該怎么做來維護訂單,以及如何在 javascript 端循環遍歷 php 返回的數組,以便我的訂單保持不變?

謝謝 & 花了很多時間來完成這項工作,但 json.parse() 不允許我維護 php 數組的順序,並且不知道在 javascript 端循環遍歷 php 數組的任何其他方法。

許多人沒有得到正確的答案,因為我在 stackoverflow 上檢查了許多其他帖子,但沒有得到我的答案。 所以請不要在這里引用任何其他帖子。

PHP 中的JSON_ENCODE保留了鍵順序,但在 Javascript 中並非如此。

PHP

$arr = [3 => "A", 1 => "B", 2 => "C"];
echo json_encode($arr);

Output:
{"3":"A","1":"B","2":"C"}

但是如果你在Javascript嘗試相同

var obj = {"3":"A","1":"B","2":"C"};
console.log(JSON.stringify(obj));

Output:
"{"1":"B","2":"C","3":"A"}"

要在 javascript 中也保留鍵順序,您需要在 PHP 中創建對象數組。

$newArr = [];
foreach($arr as $key => $value){
    $newArr[] = [$key => $value];
}

echo json_encode($newArr);

Output:
[{"3":"A"},{"1":"B"},{"2":"C"}]

現在您可以在 Javascript 中訪問相同的內容。

arrObj = JSON.parse(str);

arrObj.forEach(function(element) {
    for (strKey in element) {
        console.log(strKey + ' : ' + element[strKey]);
    }
});

Output:
3 : A
1 : B
2 : C

試試這個代碼:

echo json_encode($new,JSON_UNESCAPED_UNICODE);

您可以使用JSON_FORCE_OBJECT參數使json_encode輸出為對象。 這將在輸出中包含 javascript 識別的鍵:

echo json_encode(array_values($new), JSON_FORCE_OBJECT | JSON_UNESCAPED_SLASHES);

輸出:

{
    "71": "07/09/2019-Saturday",
    "81": "08/09/2019-Sunday",
    "83": "09/09/2019-Monday",
    "84": "10/09/2019-Tuesday",
    "72": "15/09/2019-Sunday",
    "73": "16/09/2019-Monday",
    "74": "17/09/2019-Tuesday",
    "75": "18/09/2019-Wednesday"
}

3v4l.org 上的演示

在 JavaScript 中:

 let json = '{\\ "71": "07/09/2019-Saturday",\\ "81": "08/09/2019-Sunday",\\ "83": "09/09/2019-Monday",\\ "84": "10/09/2019-Tuesday",\\ "72": "15/09/2019-Sunday",\\ "73": "16/09/2019-Monday",\\ "74": "17/09/2019-Tuesday",\\ "75": "18/09/2019-Wednesday"\\ }'; let obj = JSON.parse(json); console.log(obj[72]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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