2010-10-05 2 views
0

У меня возникли проблемы с попыткой построить массив в 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}] 
    ] 
    } 
] 

Все указатели на это было бы здорово!

+0

является то, что он отличается от предыдущего вопроса [] (http://stackoverflow.com/questions/3854138/help-using-json-encode-to-produce- конкретный формат)? – Gordon

+0

немного - пытаясь правильно построить структуру массива внутри цикла, ITroubs устранила проблему в моем коде – spinozf

ответ

1

В принципе, если вы знаете свой желаемый результат в формате 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)); 

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

+0

Wooosh. Пошел полностью над моей головой = ( –

+0

Я согласен с russell – ITroubs

+1

Да - 'json_decode' сгенерирует правильную структуру PHP :) Мне нравится – gnud

1

сделать это:

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

Глядя на строку 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)) 
); 
+0

Объекты JSON представлены только как ассоциативные массивы если вы поместите второй аргумент в 'json_decode' в значение TRUE. В противном случае это объекты StdClass. Вы имеете в виду, что ассоциативные массивы в PHP закодированы для объектов JSON. Помимо этого крошечного nitpick, +1. – Gordon

+1

@ Gordon: Вы абсолютно правы, я обновил свой ответ. –

Смежные вопросы