У меня есть массив объектов 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 с именем и идентификатором в этом формате:
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]
})
}
Но это приводит к массиву объектов, каждый из которых имеет свойство «данные». Вот console.log testVariable:
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);
Вы можете преобразовать последний массив JSON Javascript в
var characters = {
data: [{
"name": "Cyclops",
id: 10
},
{
"name": "Professor X",
id: 11
}
]
}
Используя ваш результат PHP кода
0: {…}
data: Object {id: «10», имя: «Циклоп»,…}
прото: Объект {…}
1: {…}
данные: Объект {id: «11», имя: «Профессор 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», имя: «Cyclops»}
1
:
{id: «11», имя: «Профессор X»}
длина
:
2
прото
:
Array (0)
Я надеюсь, что это поможет вам