算法苦逼,求一个最佳方案

2012-12-17 12:53:36 +08:00
 iloveyou
是关于php和mysql的。

从一个items里读出多条记录,字段为 id, title,parent_id。其中parent_id关联其他记录的id,如果没有关联parent_id默认为0。比如如下几条记录:

id title parent_id
1 title1 0
2 title2 0
3 title3 1
4 title4 2

请问如何最优雅的转化成这种json格式:

[
{id:1, title:title1, parent_id:0, child:[{id:3,title:title3,parent_id:1}]}
{id:2, title:title2, parent_id:0, child:[{id:4,title:title4,parent_id:2}]}
]

其实就是把子条目塞进父条目里,我的想法是要用两个循环先把父条目读出,然后再循环子条目塞进父条目里。哪位大神能用一个循环解决掉?
5323 次点击
所在节点    PHP
21 条回复
sallon88
2012-12-19 16:12:53 +08:00
不就是无限分类么,曾经看到过有人使用引用做的,大概是这个样子
<pre>
function get_tree($items)
{
$tree = array(); //格式化好的树
foreach ($items as $item)
if (isset($items[$item['parent_id']]))
$items[$item['parent_id']]['child'][] = &$items[$item['id']];
else
$tree[] = &$items[$item['id']];
return $tree;
}
$items = array(
1 => array('id'=>1, 'title'=>'title1', 'parent_id'=>0),
2 => array('id'=>2, 'title'=>'title2', 'parent_id'=>0),
3 => array('id'=>3, 'title'=>'title3', 'parent_id'=>1),
4 => array('id'=>4, 'title'=>'title4', 'parent_id'=>2)
);
echo json_encode(get_tree($items));
</pre>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/55109

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX