2012-09-10 112 views
-1

我:php json_encode格式化結果?

$all = array(
    array('id'=>1, 'cat'=>'Main','type'=>'Name0'), 
    array('id'=>2, 'cat'=>'Main','type'=>'Name1'), 
    array('id'=>3, 'cat'=>'Main','type'=>'Name3'), 
    array('id'=>4, 'cat'=>'Main','type'=>'Name4'), 
    array('id'=>5, 'cat'=>'Secondary','type'=>'Name5'), 
    array('id'=>6, 'cat'=>'Secondary','type'=>'Name6'), 
    array('id'=>7, 'cat'=>'Secondary','type'=>'Name7'), 
    array('id'=>8, 'cat'=>'Other','type'=>'Name8'), 
    array('id'=>9, 'cat'=>'Other','type'=>'Name9'), 
    array('id'=>10, 'cat'=>'Other','type'=>'Name10'), 
    array('id'=>11, 'cat'=>'Other','type'=>'Name11'), 
); 

$result = array(); 
    foreach($all as $array){ 
    $result[$array['cat']][] = array('id'=>$array['id'],'type'=>$array['type']); 
} 

$json_type = json_encode($result); 

將返回:

{"Main":[{"id":"1","type":"name1"},{"id":"2","type":"name2"},{"id":"3","type":"name3"},{"id":"4","type":"name4"}],"Secondary":[{"id":"5","type":"name5"},{"id":"6","type":"name6"},{"id":"7","type":"name7"}],"Other":[{"id":"8","type":"name8"},{"id":"9","type":"name9"},{"id":"10","type":"name10"},{"id":"11","type":"name11"}]} 

但我需要它來作爲回報:

[ 
{ 
    "text": "Main", 
    "children": [ 
     { 
      "id": "1", 
      "text": "name1" 
     }, 
     { 
      "id": "2", 
      "text": "name2" 
     }, 
     { 
      "id": "3", 
      "text": "name3" 
     }, 
     { 
      "id": "4", 
      "text": "name4" 
     } 
    ] 
}, 
{ 
    "text": "Secondary", 
    "children": [ 
     { 
      "id": "5", 
      "text": "name5" 
     }, 
     { 
      "id": "6", 
      "text": "name6" 
     }, 
     { 
      "id": "7", 
      "text": "name7" 
     } 
    ] 
}, 
{ 
    "text": "Other", 
    "children": [ 
     { 
      "id": "8", 
      "text": "name8" 
     }, 
     { 
      "id": "9", 
      "text": "name9" 
     }, 
     { 
      "id": "10", 
      "text": "name10" 
     }, 
     { 
      "id": "11", 
      "text": "name11" 
     } 
    ] 
} 

]

爲了與選擇2 jQuery插件的工作,我正在合作。 '孩子'的名字並不重要,我認爲這只是一個佔位符,所以它得到正確的解析。我不知道我會怎麼做,我一直在嘗試str_replace(),但即使這樣做還沒有那麼好。

+1

什麼你問的需要自定義您的編碼部分,尤其是因爲你正在尋找的輸出是無效的json。 – bdares

+0

未加引號的鍵是無效的JSON。你真的想*那*嗎?如果你只是在談論數組結構......在JSON編碼之前調整結構以滿足需要。 – deceze

+0

鑰匙可以或不可以被引用。就像我在網上找到的例子,通過谷歌的格式,他們沒有被引用,這對我所需要的,但引用將工作以及。 – Dev

回答

1

我會對它進行2個循環。第一個按類別組的結果,第二一個進行格式化,以滿足您的需求:

$temp = array(); 
foreach($all as $array){  
    if (!isset($temp[$array['cat']])) { 
     $temp[$array['cat']] = array(); 
    } 

    $temp[$array['cat']][] = array('id'=>$array['id'], 'type'=>$array['type']); 
} 

$result = array(); 
foreach ($temp as $key=>$value) { 
    $result[] = array('text'=>$key, 'children'=>$value); 
} 

echo json_encode($result); 

這將產生以下的輸出:

[{"text":"Main","children":[{"id":1,"type":"Name0"},{"id":2,"type":"Name1"},{"id":3,"type":"Name3"},{"id":4,"type":"Name4"}]},{"text":"Secondary","children":[{"id":5,"type":"Name5"},{"id":6,"type":"Name6"},{"id":7,"type":"Name7"}]},{"text":"Other","children":[{"id":8,"type":"Name8"},{"id":9,"type":"Name9"},{"id":10,"type":"Name10"},{"id":11,"type":"Name11"}]}] 
+0

OP想要JSON字符串漂亮。生成它不是問題。 –

+0

@MarcB問題很不清楚。你認爲這只是格式問題嗎?爲什麼[select2](http://ivaynberg.github.com/select2/)非常關心JSON呢? – Tchoupi

+0

IT花了一點,Mathieu,但我能夠得到這個爲我工作。謝謝。 – Dev