保留关联 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的主要内容,如果未能解决你的问题,请参考以下文章