现在有一个分类表包含如下字段idparentid父idorder该项在其所处层级的显示顺序,值越小越靠前text内容比如像下边这样的数据(text字段内容只是为了方便说明才这么写,实际内容不是这样):idparentidordertext10101200231201-241101-153201-2-263101-2-172302-1如何将其排序为(大体是按parentid和order排序)idparentidordertext200272302-11010141101-131201-263101-2-153201-2-2简单来说就是一个无限分类的子分类排序问题。先按照父子分类排序,再将所有同级分类按照order排序。我目前用的是最笨的方法,就是将每层分类单独读取出来(递归),排序好后在插入到总数组中,而且目前只测试了对3级分类的支持,但是感觉这种效率好低啊,不知道有没有什么好的算法,望大神帮忙,或指点一二,做好基于php。
2 回答
ITMISS
TA贡献1871条经验 获得超8个赞
数据结构:为所有顶级分类设置一个虚拟的父分类,然后每个分类有一个指向其已序子分类数组的引用。排序操作:在每个节点上执行获取所有子分类并排序后保存到一个数组中的操作。如果非得要放在同一个数组中,那就在排序完成以后再把结果按顺序放到一个数组里。当然,我还是建议修改读取数组的方法,让它能够解析树形结构。
德玛西亚99
TA贡献1770条经验 获得超3个赞
我有个思路,从数据库获取数据时,根据parentid和order排序,orderbyparentidasc,orderasc获取到所有数据在到php里一个循环:foreach($listas$v){$tmp[$v['parentid']][]=$v;}这样是排好序的,有子集的根节点这时候再来一个递归,将根节点加入就行了
添加回答
举报
0/150
提交
取消