保留关联 PHP 数组的顺序,同时通过 ajax 将其传递给 javascript

Posted

技术标签:

【中文标题】保留关联 PHP 数组的顺序,同时通过 ajax 将其传递给 javascript【英文标题】:Preserving order of an associative PHP array while passing it to javascript through ajax 【发布时间】:2017-01-01 07:28:58 【问题描述】:

这是我的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 的原始顺序

Object 4: "chaya", 7: "samei", 10: "abetterchutia"
4 chutiya
7 sali
10 abetterchutia

【问题讨论】:

可能相关***.com/questions/5020699/… 【参考方案1】:

使用哈希图的问题在于它们实际上并没有指定顺序。虽然,在 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";

这给了我们

我是第一 我是第二 我是第三

但是将其编码为 Javascript 对象表示法(即 JSON),你会得到一个对象,因为在 Javascript 数组中没有键,它们有索引。

echo json_encode($arr);

给我们...

"4":"我是第一名","1":"我是第二名","3":"我是第三名"

如果你尝试在 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>");

这可能会给你更多的东西......

我是第二 我是第三 我是第一

所以解决这个问题的唯一方法是使用数组...

json_encode(array_values($arr));

现在这给了我们...

[“我是第一”,“我是第二”,“我是第三”]

并且顺序保持不变。

但是,如果您还想保留密钥,则必须创建一个对象数组。

$json = [];
foreach($arr as $key => $value) 
    $json[] = [$key => $value];


echo json_encode($json);

现在你得到...

["4":"我是第一","1":"我是第二","3":"我是第三"]

在 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
    

【讨论】:

非常感谢您详细解释我真的很感激它,因为我是 javascript 新手。 如果我想要很好的(JSON 确实很好)序列化函数来保留顺序,因为 PHP 支持 hashmap?

以上是关于保留关联 PHP 数组的顺序,同时通过 ajax 将其传递给 javascript的主要内容,如果未能解决你的问题,请参考以下文章

访问大型 numpy 数组,同时保留其顺序

$.parseJSON 改变关联数组的顺序

部分删除/销毁 $_SESSION 数据? PHP

PHP如何跟踪关联数组中的顺序?

php保留键随机打乱数组顺序

php判断数组是关联数组还是数值数组