PHP Object массив в JavaScript ассоциативный массив

У меня есть массив объектов 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", … }

Как это исправить?

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

Другие решения

Вы можете преобразовать последний массив 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)

Я надеюсь, что это поможет вам

1

По вопросам рекламы [email protected]