我有一个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"
}
我需要将其转换为具有此格式的名称和ID的javascript数组:
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]
})
}
但这会产生一系列对象,每个对象都有一个&#34;数据&#34;属性。这是testVariable的console.log:
0: {…}
data: Object { id: "10", name: "Cyclops", … }
__proto__: Object { … }
1: {…}
data: Object { id: "11", name: "Professor X", … }
我该如何解决这个问题?
答案 0 :(得分:1)
不是最困难的任务,因为您几乎拥有所需的格式。首先我必须补充一点,你甚至可能不必过滤掉地址字段,因为插件可能会完全忽略它。如果是这种情况,您可以简单地执行此操作
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);
答案 1 :(得分:1)
您可以将最后一个javascript JSON数组转换为
var characters = {
data: [{
"name": "Cyclops",
id: 10
},
{
"name": "Professor X",
id: 11
}
]
}
使用您的PHP代码结果
0: {…}
data:Object {id:&#34; 10&#34 ;, name:&#34; Cyclops&#34;,...} proto :对象{...} 1:{...} data:Object {id:&#34; 11&#34;,name:&#34; X教授&#34;,...}
使用需要将最终的结果存储到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:&#34; 10&#34;,名称:&#34;独眼巨人&#34;} 1 : {id:&#34; 11&#34 ;,姓名:&#34; X教授&#34;} 长度 : 2 的原强> : 阵列(0)
我希望它能帮到你