thinkphp无限级菜单问题

Y.A.K.E 2015-05-29 04:36:24

array(7) {
[0] => array(8) {
["id"] => string(1) "1"
["parentid"] => string(1) "0"
["classname"] => string(12) "中文菜单"
["linkurl"] => string(0) ""
["picurl"] => string(1) "0"
["isshow"] => string(1) "1"
["sort"] => string(1) "0"
["v_model"] => string(1) "0"
}
[1] => array(8) {
["id"] => string(1) "7"
["parentid"] => string(1) "0"
["classname"] => string(12) "英文菜单"
["linkurl"] => string(0) ""
["picurl"] => string(1) "0"
["isshow"] => string(1) "1"
["sort"] => string(1) "0"
["v_model"] => string(1) "0"
}
[2] => array(8) {
["id"] => string(1) "2"
["parentid"] => string(1) "1"
["classname"] => string(6) "首页"
["linkurl"] => string(0) ""
["picurl"] => string(1) "0"
["isshow"] => string(1) "1"
["sort"] => string(1) "0"
["v_model"] => string(1) "0"
}
[3] => array(8) {
["id"] => string(1) "4"
["parentid"] => string(1) "1"
["classname"] => string(6) "测试"
["linkurl"] => string(0) ""
["picurl"] => string(1) "0"
["isshow"] => string(1) "1"
["sort"] => string(1) "0"
["v_model"] => string(1) "1"
}
[4] => array(8) {
["id"] => string(1) "5"
["parentid"] => string(1) "1"
["classname"] => string(6) "新闻"
["linkurl"] => string(0) ""
["picurl"] => string(1) "0"
["isshow"] => string(1) "1"
["sort"] => string(1) "0"
["v_model"] => string(1) "2"
}
[5] => array(8) {
["id"] => string(1) "6"
["parentid"] => string(1) "5"
["classname"] => string(12) "公司新闻"
["linkurl"] => string(0) ""
["picurl"] => string(1) "0"
["isshow"] => string(1) "1"
["sort"] => string(1) "0"
["v_model"] => string(1) "2"
}
[6] => array(8) {
["id"] => string(1) "8"
["parentid"] => string(1) "7"
["classname"] => string(4) "Home"
["linkurl"] => string(0) ""
["picurl"] => string(1) "0"
["isshow"] => string(1) "1"
["sort"] => string(1) "0"
["v_model"] => string(1) "0"
}
}




数据大概是这样.


然后想要他排序好.按树形结构输出
比如原来
[0] 是中文菜单
[1] 是英文菜单
[2] 是首页 (归属中文菜单)
.....

要实现
[0] 中文菜单
[1] |--首页(归属中文菜单)
[2] |--测试(归属中文菜单)
[3] |--新闻(归属中文菜单)
[4] |----公司新闻(归属中文--新闻菜单)
(如果还有子分类继续遍历)
...
[n] 英文菜单
[n+1] |--Home(归属英文菜单)


递归折腾的老是死循环.求科普下
...全文
668 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyz_jink 2015-06-20
  • 打赏
  • 举报
回复
看看楼主够用不 echo "<pre>"; $run=array(); function newarray($arr,$nub=0){ foreach($arr as $as1=>$as2){ if($as2['parentid']==$nub){ $as2['last']=newarray($arr,$as2['id']); $run[]=$as2; } } return @$run; } $aw=newarray($accs); print_r($aw);
丢雷老谋 2015-06-19
  • 打赏
  • 举报
回复
这个我觉得你还是去百度搜比较靠谱,我曾经搜到过一个很好的算法,可惜忘了放哪啦!只知道这个必须要利用好变量的引用,顶多十几行的一个函数,你搜搜php无限级分类算法
buxkk321 2015-06-14
  • 打赏
  • 举报
回复
假设你的数据全部放在$data里面,,, $self_key='id'; $parent_key='pid'; $sort_key='sort'; $final_sort='sort_pid' $arr=array(); foreach($data as $v){ $arr[$v[$self_key]]=$v; } $data=$arr; foreach($data as $k=>$v){ $deal_list=array($k); $last_sort_key=array(); $pid_now=$v[$parent_key]; while(isset($data[$pid_now])){/*如果列表中存在父项数据*/ if(isset($data[$pid_now][$final_sort])){ /*如果父项已存在final_sort键,则将该final_sort记录下并退出循环*/ $last_sort_key=$data[$pid_now][$final_sort]; break; } /*父项还未设置final_sort,将父项id加入待处理列表*/ array_unshift($deal_list,$pid_now); $pid_now=$data[$pid_now][$parent_key];/*父项的父项的id*/ } foreach($deal_list as $data_key){ $last_sort_key[]=$data[$data_key][$sort_key]; $last_sort_key[]=$data[$data_key][$self_key]; $data[$data_key][$final_sort]=$last_sort_key; } } /*最终的排序*/ usort($data,function($a,$b)use($final_sort){ foreach($a[$final_sort] as $k=>$v){ if($v==$b[$final_sort][$k]) continue; if($v>$b[$final_sort][$k]){ return 1; }else{ return -1; } } return 0; });
Y.A.K.E 2015-05-29
  • 打赏
  • 举报
回复
另外 classname 要添加制表符 该如何

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧