2012-08-08 71 views
0

我的表如下所示:還給JSON陣列與子陣列

id | title | link | kind 
------------------------ 
1 link1 http one 
4 link2 http two 
2 link9 http one 

我想給回一個JSON陣列(!JSON解析是沒問題的),它看起來像:

one 
- link1, http 
- link9, http 
two 
- link2, http 

種族是動態所以我不知道實際的字符串。 (但是,這是從來沒有(空)!)

我有什麼:

$links = array(); 
while($row = mysql_fetch_object($result)) { 
    $link = array(
     'title' => $row->title, 
     'link' => $row->link, 
     'kind' => $row->kind 
    ); 
    $links[] = $link; 
} 

echo json_encode($links); 

這是一個數組,每個元素的所有列。

+0

這是個問題?我不明白你需要什麼 – 2012-08-08 09:45:30

回答

0

使用$ row-> kind作爲頂級數組的索引。

$kinds = array('one' => 1, 'two' => 2, ...etc...); 
$links = array(); 
while($row = mysql_fetch_object($result)) { 
    $link = array(
     'title' => $row->title, 
     'link' => $row->link 
    ); 
    $links[$kinds[$row->kind]][] = $link; 
} 

echo json_encode($links); 
+0

追加到一個空值是好的,並會創建一個新的數組,至少直到PHP 5.3(不知道約5.4)。它甚至不會用'E_ALL'發出警告。 編輯:我認爲這是一個預期的功能,因爲它簡化了很多代碼。 – 2012-08-08 09:52:33

+0

好的,這個工程...但我想還是有一個錯誤。 iPhone崩潰。我需要的結構:數組 - >數組 - >字典 – DAS 2012-08-08 09:55:46

+0

你不能有一個外鍵字典的字符串'一','二'等等。你是否要將字面數轉換爲整數? – 2012-08-08 09:56:33

0

可以在MySQL查詢做到這一點:

SELECT CONCAT("[", 
      GROUP_CONCAT(
       CONCAT("{".kind.":'",title ,"'"), 
       CONCAT(",".kind.":'",link),"'}") 
     ) 
    ,"]") AS json 
FROM table_name; 
+1

如果標題有引號,會發生什麼情況? – K2xL 2013-12-20 20:28:10