Помогите сгенерировать хитрый многомерный формат массива - PullRequest
0 голосов
/ 05 октября 2010

У меня возникают проблемы при попытке построить массив на PHP, который будет выводить в формате JSON, который я ищу.Я покажу вам, чего я пытаюсь достичь и куда я дошел до этого момента:

[
    {"data":[{"x":3,"y":0},{"x":10,"y":0}]},
    {"data":[{"x":11,"y":0},{"x":13,"y":0}]},
    {"data":[{"x":12,"y":1},{"x":17,"y":1}]}
]

Я перебираю результаты в БД и пытаюсь построить массивы для вывода вышеуказанного json, мой php выглядит так(что, очевидно, еще не правильно):

//build the data
                    $data = array(
                                array(
                                    'x' => $age_start, 
                                    'y' => $ill_type
                                ),
                                array(
                                    'x' => $age_end, 
                                    'y' => $ill_type
                                )
                            );

                    $illnesses[] = $data;  

Этот код выводит следующий json:

[
   {
     [
        [{"x":2,"y":6},{"x":2,"y":6}],
        [{"x":2,"y":6},{"x":5,"y":6}],
        [{"x":4,"y":6},{"x":4,"y":6}]
    ]
  }
]

Любые указатели на это были бы хороши!

Ответы [ 3 ]

1 голос
/ 05 октября 2010

По сути, если вы уже знаете желаемый вывод JSON, вы можете просто json_decode получить его представление в PHP. Функция var_export печатает структуру в разбираемом формате. Вы также можете использовать print_r или var_dump, чтобы вывести структуру.

$json = <<< JSON
[
    {"data":[{"x":3,"y":0},{"x":10,"y":0}]},
    {"data":[{"x":11,"y":0},{"x":13,"y":0}]},
    {"data":[{"x":12,"y":1},{"x":17,"y":1}]}
]
JSON;

var_export( json_decode($json) );

Вышеуказанный подход универсален. Просто расшифруйте и сбросьте структуру. Затем соберите свой код для создания этой структуры и кодируйте.

1 голос
/ 05 октября 2010

Глядя на строку JSON, вы видите, что:

  • это массив (он окружен [ и ])
  • каждый элемент представляет собой объект (окруженный { и })
  • объекты имеют элемент data, который сам является массивом
  • этот массив состоит из двух объектов со свойством x и y

Важно знать, что объект JSON представлен в PHP ассоциативным массивом (когда json_encode() 'ing, json_decode() имеет определенный параметр для использования либо stdClass, либо массива ассоциаций).
Итак, структура php выглядит следующим образом:

$data = array(
  array('data' => array(array('x' => 3, 'y' => 0), array('x' => 10, 'y' => 0))
  ,array('data' => array(array('x' => 11, 'y' => 0), array('x' => 13, 'y' => 0))
  ,array('data' => array(array('x' => 12, 'y' => 1), array('x' => 17, 'y' => 1))
);
1 голос
/ 05 октября 2010

сделать это:

$data['data'] = array(
        array(
                'x' => $age_start,
                'y' => $ill_type
        ),
        array(
                'x' => $age_end,
                'y' => $ill_type
        )
);
...