2015-01-05 3 views
-5

У меня есть тезисы два кода, чтобы сделать JSON из массива в PHP:Что отличается от 2 JSON с PHP

Код 1

$array_1 = array("A","B","C"); 
$array_2 = array("D","E","F"); 
echo json_encode(array('array_0'=> array('array_1'=>$array_1,'array_2'=>$array_2))); 

Выход:

{ 
    "array_0": 
    { 
     "array_1": ["A", "B", "C"], 
     "array_2": ["D", "E", "F"] 
    } 
} 

Code 2

$A = array('A','B','C'); 
$B = array('array_1' => $A); 
$C = array('D','F','E'); 
$D = array('array_2' => $C); 
$E = array($B, $D); 
$F = array('array_0' => $E); 
echo json_encode($F); 

Выход:

{ 
    "array_0": [ 
     { 
      "array_1": ["A", "B", "C"] 
     }, 
     { 
      "array_2": ["D", "F", "E"] 
     } 
    ] 
} 

Почему существует разница между 2 выхода? Какой из них правильный?

Спасибо!

+4

Что вы подразумеваете под "c дый правильный "? Оба правильные. Это две разные структуры. Почему бы «правильно» и «неправильно»? –

+0

Почему это разные структуры? Я думаю, что код 2 такой же? – Ivan

+0

«Код 2» - это не то же самое. В «коде 2» вы выполняете 'array ($ B, $ D)'. Вы создаете массив из 2 массивов. Это отличается от «кода 1». Что вы должны делать: '$ B ['array_2'] = $ C; $ F = массив ('array_0' => $ B); '. Избавьтесь от '$ D' и' $ E'. Вы хотите добавить 'array_1' * и *' array_2' в * тот же самый массив, не добавляя их в свои собственные массивы. –

ответ

1

В code_2 вы создаете array_0 как:

array(array('array_1' => $A), array('array_2' => $C)); 
// ^$E ^$B     ^$D 

В то время как подобный шаг в вашей code_1 является:

array('array_1' => $A, 'array_2' => $C) 

Вы можете сделать их похожими по определению $E в code_2 следующим образом:

$E = array_merge($B, $D) 
0

В первом случае array_0 является ассоциативным массивом, который переводится в объект js.

Во втором случае array_0 представляет собой числовой массив, который преобразуется в массив js.

Неправильно. Они оба правильны.