2013-09-21 2 views
1

Глядя на вывод JSON в следующем формате:Построить многомерный массив для вывода JSon

[{"Montgomery":[{"red":"12:34:56","yellow":"11:44:46","orange":"10:54:36","green":"9:24:26","purple":"8:14:16"}],"Suburban":[{"red":"12:34:56","yellow":"11:44:46","orange":"10:54:36","green":"9:24:26","purple":"8:14:16"}],"Shady Grove Adventist":[{"red":"12:34:56","yellow":"11:44:46","orange":"10:54:36","green":"9:24:26","purple":"8:14:16"}],"Holy Cross":[{"red":"12:34:56","yellow":"11:44:46","orange":"10:54:36","green":"9:24:26","purple":"8:14:16"}],"Washington Adventist":[{"red":"12:34:56","yellow":"11:44:46","orange":"10:54:36","green":"9:24:26","purple":"8:14:16"}]}] 

Мой код:

$xyz[] = array("Montgomery"=> array("Red" => "12:00", "Yellow" => "14:00")); 
$xyz[] = array("Suburban"=> array("Yellow" => "16:00")); 

echo '[' . json_encode($xyz) . ']'; 

Мои результаты:

[[{"Montgomery":{"Red":"12:00","Yellow":"14:00"}},{"Suburban":{"Yellow":"16:00"}}]] 

ответ

2

Это даст вам Структура:

$container = array(); 
$container['Montgomery'] = array(array('red' => '12:34:56', 'yellow' => '11:44:46')); 
$container['Suburban'] = array(array('red' => '12:34:56', 'yellow' => '11:44:46')); 
echo json_encode(array($container)); 
+0

Отлично, это именно то, что я искал ... @wwwslinger: Я хотел сохранить все в массиве, а не создавать класс, но отличные варианты, спасибо вам обоим. – BarclayVision

1

Вы можете использовать объекты, что-то вроде этого (вы хотите, чтобы очистить его немного):

class Church { 
    public $red = ""; 
    public $yellow = ""; 
    public $orange = ""; 
    public $green = ""; 
    public $purple = ""; 
} 
class XYZ { 
    public $Montgomery = new Church(); 
    public $Shad_Grove_Adventist = new Church(); 
    public $Holy_Cross = new Church(); 
    public $Washington_Adventist = new Church(); 
} 

$xyz = new XYZ(); 
$xyz->Montgomery->red = "12:00"; 
... 

затем вывести ваш JSON:

echo '[' . json_encode($xyz) . ']'; 

Это не будет идеальным соответствуют вашему желаемому выходу JSON, но это даст лучшую читаемость и большую гибкость.

+0

Как это допустимая переменная с пробелом? 'public $ Shad_Grove Adventist'? ;) – Jakub

+0

Извините, для этого нужны символы подчеркивания. – wwwslinger

0

Желаемый результат имеет массив [] как элемент верхнего уровня. [] в JSON соответствует числовому массиву в PHP. Массив JSON используется для хранения упорядоченного набора элементов.

Ваш массив верхнего уровня содержит один элемент, объект JSON {}. Объект PHP (stdClass) или ассоциативный массив преобразуется в это в JSON. Объект JSON используется для создания наборов пар ключ-значение.

Для получения нужного вывода, строить свои данные в PHP, как это:

// Top-level numeric array. 
$container = array(); 

// Only item in top-level array. 
$item = array(); 

// The value of each of these items will be a numeric array. 
$item['Montgomery'] = array(); 

// Create a new associative array, and push that onto the list array. 
$subItem = array("red" => "12:34:56", 
     "yellow" => "11:44:46", 
     "orange" => "10:54:36", 
     "green" => "9:24:26", 
     "purple" => "8:14:16"); 
$item['Montgomery'][] = $subItem; 
$container[] = $item; 

// ...Add more items... 

print json_encode($container); 

Или, если вы хотите построить все сразу:

$container = array(
    array(
     "Montgomery" => array(
      array("red" => "12:34:56", 
       "yellow" => "11:44:46", 
       "orange" => "10:54:36", 
       "green" => "9:24:26", 
       "purple" => "8:14:16" 
      ) 
     ) 
     // ...More items... 
    ) 
); 

print json_encode($container); 

Обратите внимание, что есть места, имеют массив внутри массива. Это необходимо для создания ассоциативного массива и добавления его как единственного члена числового массива. Это соответствует наличию {} внутри [].

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