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)
希望对你有所帮助
我有一个 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)
希望对你有所帮助