PHP объединяет два массива с одинаковым ключом и выводит в определенный формат JSON - PullRequest
0 голосов
/ 27 мая 2019

В моей базе данных есть две таблицы.Один вызывает информацию о книге, а другой вызывает информацию об изображении.Я хотел бы объединить эти две таблицы данных в один JSON.Если идентификатор img совпадает с идентификатором данных, то изображение принадлежит этой книге.Я попытался использовать foreach для зацикливания данных книги в массив и использовать другой foreach для зацикливания данных изображения в массиве данных книги, но не смог получить ожидаемый результат.

Таблица книг JSON:

{
 "data": [
    {
        "id": 17,
        "author": "Belcurls",
        "bookname": "You Never Know"
    },
    {
        "id": 18,
        "author": "Carolina",
        "bookname": "A Story Teller"
    },
    {
        "id": 19,
        "author": "Lokas",
        "bookname": "The Love"
    }
 ]
}

Таблица изображений JSON:

{
"img": [
    {
        "id": 18,
        "url": "image18.png"
    },
    {
        "id": 18,
        "url": "image18b.png"
    },
    {
        "id": 19,
        "url": "image19.png"
    },
    {
        "id": 19,
        "url": "image19b.png"
    },
    {
        "id": 19,
        "url": "image19c.png"
    }
]
}

Ожидаемый результат:

{
 "data": [
    {
        "id": 17,
        "author": "Belcurls",
        "bookname": "You Never Know"
    },
    {
        "id": 18,
        "author": "Carolina",
        "bookname": "A Story Teller",
        "image":[
           {
             "url":"image18"
           },
           {
             "url":"image18b"
           }
         ]
    },
    {
        "id": 19,
        "author": "Lokas",
        "bookname": "The Love",
        "image":[
           {
             "url":"image19"
           },
           {
             "url":"image19b"
           },
           {
             "url":"image19c"
           }
         ]
    }
 ]
 }

Ответы [ 2 ]

2 голосов
/ 27 мая 2019

Демонстрационная ссылка .

Вы можете сделать этот цикл, пожалуйста, проверьте встроенный документ для объяснения

foreach ($arr['data'] as $key => &$value) { // & to update changes as its address
    foreach ($imgs['img'] as $key1 => $value1) {
        if($value['id'] == $value1['id']){ // checking if match id of parent with images
            $value['image'][] = ['url' => $value1['url']]; // then simply push
        }
    }
}

Если вы хотите преобразовать свой json в массив php, используйте

 json_decode($yourjson, true); // second parameter is for converting it to array else it will convert into object.
0 голосов
/ 27 мая 2019

Если вы сделаете массив данных ассоциативным, вам нужно всего лишь зациклить массив изображений и добавить их в правильный подмассив данных.

// This flattens the array and makes it associative
$data = array_column($data['data'], null, 'id');

foreach($img['img'] as $v){
    $data[$v['id']]['image'][] = ['url' => $v['url']];
}
// Add the 'data' again
$final['data'] = array_values($data);

var_dump($final);
echo json_encode($final);

https://3v4l.org/736lQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...