PHP 对象数组到 javascript 关联数组

PHP Object array to javascript associative array

我有一个 PHP 对象数组如下:

array(223) {
  [0]=>
  object(stdClass)#5 (9) {
    ["id"]=>
    string(2) "10"
    ["name"]=>
    string(10) "Cyclops"
    ["address"]=>
    string(13) "GSDG"
  }
  [1]=>
  object(stdClass)#6 (9) {
    ["id"]=>
    string(2) "11"
    ["name"]=>
    string(11) "Professor X"
    ["address"]=>
    string(8) "XX"
  }

我需要将其转换为 javascript 数组,名称和 ID 格式如下:

var characters = {
    data: [{
            "name": "Cyclops",
            id: 10
        },
        {
            "name": "Professor X",
            id: 11
        }
    ]
}

这是我尝试过的:

首先,我将 PHP 数组转换为 javascript 对象,然后使用 for 循环将每个数组的详细信息推送到 javascript 对象:

var js_data = <?php echo json_encode($chars) ?>;
var characters = [];

for (var i = 0; i < js_data.length; i++) {
    characters.push({
        data: js_data[i]
    })
}

但这会产生一个对象数组,每个对象都有一个 "data" 属性。这是 testVariable 的 console.log:

0: {…}
​​​
data: Object { id: "10", name: "Cyclops", … }
​​​
__proto__: Object { … }
​​
1: {…}
​​​
data: Object { id: "11", name: "Professor X", … }

我该如何解决这个问题?

这不是最难的任务,因为您几乎已经有了想要的格式。首先我必须补充一点,您甚至可能不必过滤掉地址字段,因为插件可能会完全忽略它。如果是这种情况,你可以简单地这样做

var characters = <?php json_encode(['data' => $chars]); ?>;

如果你真的需要过滤掉地址字段,你可以使用array_map

$chars = array_map(function($item) {
    // at this point, you don't need an object, as json_encode do the
    // same for objects and associative arrays
    return [
        "id" =>$item->id,
        "name" => $item->name
    ];
}, $chars);

您可以将最后一个 javascript JSON 数组转换为

var characters = {
data: [{
        "name": "Cyclops",
        id: 10
    },
    {
        "name": "Professor X",
        id: 11
    }
]

}

通过使用您的 PHP 代码结果

0: {…}

数据:对象{id:“10”,名称:"Cyclops",...} \ proto: 对象 { … } 的 1:{...} \ 数据:对象{ id:“11”,名称:"Professor X",...}

使用需要将下面的最终结果存储到一个js变量中,你可以使用forEach将变量推送到另一个js数组中 如果结果是

var a=[{data:{id:"10",name:"Cyclops"}},{data:{id:"11",name:"Professor X"}}]

然后使用

var b=[]
a.forEach(x=>{b.push(x.data)});

它会得到下面的结果

(2) [{…}, {…}] 0 : {id: "10", name: "Cyclops"} 1 : {id: "11", name: "Professor X"} length : 2 proto : Array(0)

希望对你有所帮助