MySQL к JSON с помощью PHP.Вложенные объекты - PullRequest
3 голосов
/ 07 ноября 2011

Добрый день, я пытаюсь поместить эти результаты в массивы в PHP, чтобы я мог кодировать их в объекты json и отправлять их клиенту.Результаты запроса выглядят так:

   id   name    hours   cat status
3bf JFK Int 24  pass    open
3bf JFK Int 24  std closed
3bf JFK Int 24  exp open
5t6 Ohm CA  18  pass    closed
5t6 Ohm CA  18  std closed
5t6 Ohm CA  18  std2    open
5t6 Ohm CA  18  exp open
...

Мне бы хотелось, чтобы объекты json выглядели так:

{ "id": "3bf", "name": "JFK Int", "cats":
    { [ { "cat": "pass", "status": "open" },
        { "cat": "std", "status": "closed" },
        { "cat": "exp", "status": "open" } ] }
{ "id": "5t6", "name": "Ohm CA", "cats":
    { [ { "cat": "pass", "status": "closed" },
        { "cat": "std", "status": "closed" },
        { "cat": "std2", "status": "open" } ],
        { "cat": "exp", "status": "open" } ] }

Я успешно подключился к mysql и экспортировал с помощью json_encode, используяплоские таблицы, но эту часть я не знаю, как это сделать в PHP.Спасибо.

Это код, который у меня есть.Это возвращает массив объектов json, но он является плоским, а не вложенным:

$SQL = "SELECT id, name, hours, cat, status FROM bwt.vewPortCats";

$result = mysql_query($SQL);

$arr = array();
    while ($row = mysql_fetch_assoc($result)) {
        $arr[] = $row;}

$json = json_encode($arr);

echo $json;

Сами данные взяты из представления, объединяющего таблицы портов и котов.

1 Ответ

9 голосов
/ 07 ноября 2011

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

$SQL = "SELECT id, name, hours, cat, status FROM bwt.vewPortCats";

$result = mysql_query($SQL);

$arr = array();
    while ($row = mysql_fetch_assoc($result)) {

        // You're going to overwrite these at each iteration, but who cares ;-)
        $arr[$row['id']]['id'] = $row['id'];
        $arr[$row['id']]['name'] = $row['name'];

        // You add the new category
        $temp = array('cat' => $row['cat'], 'status' => $row['status']);

        // New cat is ADDED
        $arr[$row['id']]['cats'][] = $temp;
    }


$base_out = array();

// Kind of dirty, but doesn't hurt much with low number of records
foreach ($arr as $key => $record) {
    // IDs were necessary before, to keep track of ports (by id), 
    // but they bother json now, so we do...
    $base_out[] = $record;
}

$json = json_encode($base_out);

echo $json;

У меня не было времени протестировать или дважды подумать об этом, но, опять же, я надеюсь, что это передает идею ...

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