PHP實(shí)現(xiàn)處理三級(jí)分類數(shù)據(jù)的示例代碼
一、原始數(shù)據(jù)
function getDatas(){ return [ [ 'component' => 'system', 'redict' => '/system', 'path' => '/system', 'hidden' => 1, 'name' => '系統(tǒng)管理', 'children' => [ [ 'component' => 'user', 'redict' => '/user', 'path' => '/user', 'hidden' => 1, 'name' => '用戶管理', 'children' => [ [ 'component' => 'user_list', 'redict' => '/user_list', 'path' => '/user_list', 'hidden' => 1, 'name' => '用戶列表', ], [ 'component' => 'role', 'redict' => '/user_role', 'path' => '/user_role', 'hidden' => 1, 'name' => '角色列表', ], [ 'component' => 'perm', 'redict' => '/perm', 'path' => '/perm', 'hidden' => 1, 'name' => '權(quán)限列表', ], ] ], [ 'component' => 'data', 'redict' => '/data', 'path' => '/data', 'hidden' => 1, 'name' => '數(shù)據(jù)管理', 'children' => [ [ 'component' => 'report', 'redict' => '/report', 'path' => '/report', 'hidden' => 1, 'name' => '分日?qǐng)?bào)表', ], [ 'component' => 'hour_report', 'redict' => '/hour_report', 'path' => '/hour_report', 'hidden' => 1, 'name' => '分時(shí)報(bào)表', ], [ 'component' => 'month_report', 'redict' => '/month_report', 'path' => '/month_report', 'hidden' => 1, 'name' => '分月報(bào)表', ], ] ], [ 'component' => 'resource', 'redict' => '/resource', 'path' => '/resource', 'hidden' => 1, 'name' => '資源管理', 'children' => [ [ 'component' => 'res_list', 'redict' => '/res_list', 'path' => '/res_list', 'hidden' => 1, 'name' => '資源列表' ] ] ] ] ] ] }
二、函數(shù)處理
function deal(){ $datas = getDatas(); $level_1_tree = []; foreach($datas as $data_level_1){ $data_level_1_arr['component'] = $data_level_1['component']; $data_level_1_arr['redict'] = $data_level_1['redict']; $data_level_1_arr['path'] = $data_level_1['path']; $data_level_1_arr['meta'] = [ 'title' => $data_level_1['name'], 'hidden' => $data_level_1['hidden'] ]; $level_2_tree = []; if(isset($data_level_1['children']) && !empty($data_level_1['children'])) { foreach ($data_level_1['children'] as $data_level_2) { $data_level_2_arr['component'] = $data_level_2['component']; $data_level_2_arr['redict'] = $data_level_2['redict']; $data_level_2_arr['path'] = $data_level_2['path']; $data_level_2_arr['meta'] = [ 'title' => $data_level_2['name'], 'hidden' => $data_level_2['hidden'] ]; $level_3_tree = []; if (isset($data_level_2['children']) && !empty($data_level_2['children'])) { foreach ($data_level_2['children'] as $data_level_3) { $data_level_3_arr['component'] = $data_level_3['component']; $data_level_3_arr['redict'] = $data_level_3['redict']; $data_level_3_arr['path'] = $data_level_3['path']; $data_level_3_arr['meta'] = [ 'title' => $data_level_3['name'], 'hidden' => $data_level_3['hidden'] ]; array_push($level_3_tree, $data_level_3_arr); unset($data_level_3_arr); } $data_level_2_arr['children'] = $level_3_tree; } array_push($level_2_tree, $data_level_2_arr); unset($data_level_2_arr); } $data_level_1_arr['children'] = $level_2_tree; } array_push($level_1_tree, $data_level_1_arr); unset($data_level_1_arr); } print_r($level_1_tree); } deal();
三、方法補(bǔ)充
除了上文的方法,小編還為大家整理了PHP處理三級(jí)分類數(shù)據(jù)的其他方法,希望對(duì)大家有所幫助
示例代碼
<?php //瞎寫的 // 鏈接數(shù)據(jù)庫 $link = mysqli_connect('localhost','root','root'); if($link == null){ exit; } mysqli_select_db($link,'test'); $link->query("SET NAMES utf8"); $sql = "select * from tp_goods_categorys"; $res = mysqli_query($link,$sql); while($res && $row = mysqli_fetch_assoc($res)) { $list[] = $row; } echo '<pre>'; print_r(res($list)); function res($items){ $tree = array(); foreach($items as $key =>$val){ $list = explode(',',$val['categorys_path']); switch(count($list)){ case 1: $tree[$val['id']] = $val; break; case 2: $tree[$val['categorys_pid']]['son'][$val['id']] = $val; break; case 3: $tree[$list[1]]['son'][$list[2]]['son'] = $val; break; } } return $tree; }
<?php //遞歸 $array = array( array('id' => 1, 'pid' => 0, 'name' => '湖北省'), array('id' => 2, 'pid' => 0, 'name' => '北京市'), array('id' => 3, 'pid' => 1, 'name' => '武漢市'), array('id' => 4, 'pid' => 2, 'name' => '朝陽區(qū)'), array('id' => 5, 'pid' => 2, 'name' => '通州區(qū)'), array('id' => 6, 'pid' => 4, 'name' => '望京'), array('id' => 7, 'pid' => 4, 'name' => '酒仙橋'), array('id' => 8, 'pid' => 3, 'name' => '武昌區(qū)'), array('id' => 9, 'pid' => 1, 'name' => '武安市'), ); function cation($arr,$num=0,$m=1) { $list = []; foreach($arr as $k=>$v){ if($v['pid'] === $num){ $v['level'] = $m; $v['son'] = cation($arr,$v['id'],$m+1); $list[] = $v; } } return $list; } $list = cation($array); echo '<pre>'; print_r($list); echo '</pre>';
另一種需求
(重組一維數(shù)組)
// 處理分類數(shù)據(jù) 欄目分級(jí) public function allMenu($cates,$pid=0,$level=0){ static $cateArr = array(); for($i=0;$i<count($cates);$i++){ if($cates[$i]['pid']==$pid){ $cates[$i]['level']=$level; $cateArr[]=$cates[$i]; $this->allMenu($cates,$cates[$i]['id'],$level+1); } } return $cateArr; }
到此這篇關(guān)于PHP實(shí)現(xiàn)處理三級(jí)分類數(shù)據(jù)的示例代碼的文章就介紹到這了,更多相關(guān)PHP處理三級(jí)分類數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php實(shí)現(xiàn)對(duì)文件壓縮簡(jiǎn)單的方法
在本篇文章里我們給大家整理的是關(guān)于php如何實(shí)現(xiàn)對(duì)文件壓縮的實(shí)例內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。2019-09-09PHP中文分詞的簡(jiǎn)單實(shí)現(xiàn)代碼分享
對(duì)于中文搜索引擎來說, 中文分詞是整個(gè)系統(tǒng)最基礎(chǔ)的部分之一, 因?yàn)槟壳盎趩巫值闹形乃阉魉惴ú⒉皇翘谩?/div> 2011-07-07PHP SPL標(biāo)準(zhǔn)庫中的常用函數(shù)介紹
這篇文章主要介紹了PHP SPL標(biāo)準(zhǔn)庫中的常用函數(shù)介紹,本文著重講解了spl_autoload_extensions()、spl_autoload_register()、spl_autoload()三個(gè)函數(shù),需要的朋友可以參考下2015-05-05php基于 swoole 實(shí)現(xiàn)的異步處理任務(wù)功能示例
這篇文章主要介紹了php基于 swoole 實(shí)現(xiàn)的異步處理任務(wù)功能,涉及swoole的安裝、配置及php調(diào)用swoole守護(hù)進(jìn)程監(jiān)控任務(wù)相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-08-08PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之類與反射API詳解
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之類與反射API,結(jié)合實(shí)例形式較為詳細(xì)的分析了類的驗(yàn)證、檢查、傳參及反射API等概念與操作技巧,需要的朋友可以參考下2016-12-12最新評(píng)論