Как создать структуру вложенного массива из набора результатов?

У меня есть этот массив событий Json

[
{
"id": "4",
"event_name": "Harliquins 7s",
"event_description": "Ruggby game",
"event_date": null,
"event_venue": "UFA grounds",
"event_company": "Harliquins",
"event_image": "http://www.aal-europe.eu/wp-content/uploads/2013/12/events_medium.jpg",
"event_ticket_no": "200",
"paybill": "25666",
"status": "0"},
{
"id": "5",
"event_name": "christie &s",
"event_description": "Ruggby",
"event_date": "1-2-2917",
"event_venue": "KISUMU ground",
"event_company": "Kenya Games",
"event_image": "N/A",
"event_ticket_no": "400",
"paybill": "79000",
"status": "0"}
]

У меня тоже есть такие варианты

[
{
"id": "4",
"event_id": "5",
"options_id": "1",
"seasonal": "1",
"amount": "300"},
{
"id": "5",
"event_id": "5",
"options_id": "2",
"seasonal": "1",
"amount": "400"}
]

Я хочу получить это как результат

[
{
"id": "4",
"event_name": "Harliquins 7s",
"event_description": "Ruggby game",
"event_date": null,
"event_venue": "UFA grounds",
"event_company": "Harliquins",
"event_image": "http://www.aal-europe.eu/wp-content/uploads/2013/12/events_medium.jpg",
"event_ticket_no": "200",
"paybill": "25666",
"status": "0"},
{
"id": "5",
"event_name": "christie &s",
"event_description": "Ruggby",
"event_date": "1-2-2917",
"event_venue": "KISUMU ground",
"event_company": "Kenya Games",
"event_image": "N/A",
"event_ticket_no": "400",
"paybill": "79000",
"status": "0",
"Options:" [
{
"id": "4",
"event_id": "5",
"options_id": "1",
"seasonal": "1",
"amount": "300"},
{
"id": "5",
"event_id": "5",
"options_id": "2",
"seasonal": "1",
"amount": "400"}
]
}
]

Вот мой код:

while( $row = $result->fetch_assoc()){
$new_array[] =$row;
$new_array['options'] =getTicketOptions($row['id']);
}
echo json_encode($new_array);

Каждый объект события имеет массив опций.

2

Решение

Вы уже почти там. Все, что вам нужно сделать, это назначить $ row и Options сразу:

while( $row = $result->fetch_assoc()){
$new_array[] = array($row, "Options" => getTicketOptions($row['id']));
}
echo json_encode($new_array);

Причина в том, что с $new_array[] Вы автоматически устанавливаете новый ключ, не зная его значения. Поэтому вы не можете просто легко добавить что-то в эту запись позже. Выполнение обоих одновременно решает это для вас.

0

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

Мне кажется, вам нужно только объединить 2 объекта:

$mergedObject = (object) array_merge((array) $events, (array) $options);
0

Я думаю, что вы хотите добавить второй массив в последней позиции ?? Если да, то следуйте ответу.

Первый массив

[{"id":"4","event_name":"Harliquins 7s"},{"id":"5","event_name":"Harliquins 7s"}]

Второй массив

[{"id":"4","event_id":"5","options_id":"1"},{"id":"4","event_id":"5","options_id":"1"}]

Обязательный массив

[{"id":"4","event_name":"Harliquins 7s"},{"id":"5","event_name":"Harliquins 7s","options":[{"id":"4","event_id":"5","options_id":"1"},{"id":"4","event_id":"5","options_id":"1"}]}]

Код php

$last_key = end(array_keys($data));
foreach ($data as $key => $value) {
if($key == $last_key){
$data[$key]['options'] = $data2;
}

}

echo json_encode($data);
0

Я получаю тот же результат, используя array_map а также array_filter функции, вы можете попробовать мой код здесь: PHP песочница, он всегда создает свойство параметров в массиве событий:

$events = json_decode($events, true);
$options = json_decode($options, true);

$result = array_map( function ($item) use ($options) {

$item['options'] = array_filter($options, function ($option) use ($item) {
return $item['id'] == $option['event_id'];
});

return $item;

}, $events);

print_r($result);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector