2012-08-08 75 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