PHP實現(xiàn)處理三級分類數(shù)據(jù)的示例代碼
更新時間:2024年02月05日 11:07:13 作者:榮~博客
這篇文章主要為大家詳細介紹了如何利用PHP實現(xiàn)處理三級分類數(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' => '分日報表',
],
[
'component' => 'hour_report',
'redict' => '/hour_report',
'path' => '/hour_report',
'hidden' => 1,
'name' => '分時報表',
],
[
'component' => 'month_report',
'redict' => '/month_report',
'path' => '/month_report',
'hidden' => 1,
'name' => '分月報表',
],
]
],
[
'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();三、方法補充
除了上文的方法,小編還為大家整理了PHP處理三級分類數(shù)據(jù)的其他方法,希望對大家有所幫助
示例代碼
<?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ù) 欄目分級
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實現(xiàn)處理三級分類數(shù)據(jù)的示例代碼的文章就介紹到這了,更多相關(guān)PHP處理三級分類數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php基于 swoole 實現(xiàn)的異步處理任務(wù)功能示例
這篇文章主要介紹了php基于 swoole 實現(xiàn)的異步處理任務(wù)功能,涉及swoole的安裝、配置及php調(diào)用swoole守護進程監(jiān)控任務(wù)相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-08-08
PHP面向?qū)ο蟪绦蛟O(shè)計之類與反射API詳解
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計之類與反射API,結(jié)合實例形式較為詳細的分析了類的驗證、檢查、傳參及反射API等概念與操作技巧,需要的朋友可以參考下2016-12-12

