簡體   English   中英

$ .each不遵守數組的順序

[英]$.each doesn't respect the order of an array

我正在嘗試在PHP中訂購多維數組,然后將其傳遞給我的javascript文件以顯示它。 我使用$.map$.each函數顯示數據。 問題是JS根據ID對數組重新排序。 例如,如果我有這樣的數組。

$array = array(1 => array('name' => 'A','last' => 'B'), 
               5 => array('name' => 'C','last' => 'D'),
               2 => array('name' => 'K','last' => 'Z'));

JavaScript將以這種方式對其進行排序

    array = {1:{name:'A',last:'B'},2:{name:'C',last:'D'},5:{name:'K',last:'Z'}}

我正在使用uasort根據名稱對數組進行排序:

public function specialNameComparison($firstElmnt,$secondElmnt){
    if ($firstElmnt['name'] == $secondElmnt['name']) {
        return 0;
    }
    return ($firstElmnt['name'] < $secondElmnt['name']) ? -1 : 1;
}

uasort($users,array($this,'specialNameComparison'));
echo json_encode($users);
die();

就像我說的那樣,在javascript中,我正在使用$.each (我已經嘗試過$.map )來簡單地顯示數據

$.each(json, function(key,value) {
   console.log(value.name);
 });

為什么Javascript會這樣做!

正如以上評論者所指出的那樣,您是在JS中創建對象而不是數組,因此沒有關聯數組,表示索引會將您置於“對象數組”的上下文中。 如果您需要這些鍵,我會建議類似的東西:

$array = [
  [ 'key' => 1, 'name' => 'A','last' => 'B' ], 
  [ 'key' => 5, 'name' => 'C','last' => 'D' ],
  [ 'key' => 2, 'name' => 'K','last' => 'Z' ],
];

當json編碼時,將輸出:

[
  { "key": 1, "name": "A","last": "B" }, 
  { "key": 5, "name": "C","last": "D" },
  { "key": 2, "name": "K","last": "Z" },
]

那么您的js可以是:

 const arr = [ { key: 1, name: 'A',last: 'B' }, { key: 5, name: 'C',last: 'D' }, { key: 2, name: 'K',last: 'Z' }, ]; arr.forEach(({key, name, last }) => console.log(`key: ${key} - ${name} ${last}`)) 

暫無
暫無

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

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