为了账号安全,请及时绑定邮箱和手机立即绑定

ajax调用后如何在javascript上以相同的顺序显示数组id和name值?

ajax调用后如何在javascript上以相同的顺序显示数组id和name值?

PHP
回首忆惘然 2021-12-24 15:58:27
我在 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 上检查了许多其他帖子,但没有得到我的答案。所以请不要在这里引用任何其他帖子。
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

JSON_ENCODE 在 PHP 中保留了键顺序,但在 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


查看完整回答
反对 回复 2021-12-24
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

试试这个代码:

echo json_encode($new,JSON_UNESCAPED_UNICODE);


查看完整回答
反对 回复 2021-12-24
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您可以使用该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]);


查看完整回答
反对 回复 2021-12-24
  • 3 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信