Объединить json

366
09 апреля 2017, 04:28

Доброго вечера. Подскажите пожалуйста по json.

Получаю:

$data['movie'] = $this->Play_lib->getmovie($id);
$data['music'] = $this->Play_lib->getmusic($id);
echo json_encode($data);

Отдает:

{
  "movie": [
    {
      "id": "12",
      "title": "Test Movie",
      "image": "s00f04f3.jpg",
      "type": "movie"
    },
  ],
  "music": [
    {
      "id": "34",
      "title": "Test Music",
      "image": "57a9773a.jpg",
      "type": "music"
    }
  ]
}

Каким образом сделать чтобы отдавало так:

[
   {
     "id": "12",
     "title": "Test Movie",
     "image": "s00f04f3.jpg",
     "type": "movie"
   },
   {
     "id": "34",
     "title": "Test Music",
     "image": "57a9773a.jpg",
     "type": "music"
   }
]

Спасибо.

Answer 1

Итак, ключи movie И music в результирующем json получаете поскольку сами их туда и записываете. Чтобы избавиться от этих строковых ключей, просто добавьте элементы в массив:

$data[] = $this->Play_lib->getmovie($id);
$data[] = $this->Play_lib->getmusic($id);

Следующий вопрос - откуда берется вложенные скобки "movie": [ { } ]. Скобки эти обозначают, что результатом работы методов getmovie/getmusic являются массивы, которые в данном случае состоят из 1 элемента.
С виду, вызов getmovie($id) похож на извлечение одного элемента по указанному ID. Здесь вам виднее, и если метод должен возвращать единственный элемент, то измените его, чтобы так и было, и возвращался объект, а не массив из одного объекта.
С другой стороны, возможно недопонимание, когда id это идентификатор, к примеру, жанра, а getmusic возвращает список соответствующих композиций.

В любом случае, если вы не можете изменить вышеуказанные методы, а из результата работы методов вам необходим только один (или единственный) элемент, то ваш код должен принимать следующий вид:

$data[] = array_shift($this->Play_lib->getmovie($id));
$data[] = array_shift($this->Play_lib->getmovie($id));
echo json_encode($data);

Используемый метод array_shift() возвращает первый элемент входного массива, или null.

Answer 2

Решение проблемы путем добавления array_merge():

$movie = $this->Play_lib->getmovie($id);
$music = $this->Play_lib->getmusic($id);
echo json_encode(array_merge($movie, $music));
READ ALSO
Open source биллинг

Open source биллинг

Здравствуйте!

365
помощь mysql join запрос

помощь mysql join запрос

здравствуйте, есть таблица users с полем messages, и есть таблица messages, нужно у всех юзеров обновить поле messages, чтобы значение было столько, сколько...

282
Как вывести ссылки на след/пред страницу пагинации joomla?

Как вывести ссылки на след/пред страницу пагинации joomla?

в стандартной пагинации joomla есть кнопки вперед/назад/вконец/вначало и собственно кнопки с номерами страницКак помимо основной пагинации...

287
не происходит UPDATE в бд

не происходит UPDATE в бд

ИтакЗдравствуйте

272