PHP實現(xiàn)處理三級分類數(shù)據(jù)的示例代碼
更新時間:2024年02月05日 11:07:13 作者:榮~博客
這篇文章主要為大家詳細(xì)介紹了如何利用PHP實現(xiàn)處理三級分類數(shù)據(jù),文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
一、原始數(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();三、方法補(bǔ)充
除了上文的方法,小編還為大家整理了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面向?qū)ο笪宕笤瓌t之開放-封閉原則(OCP)詳解
這篇文章主要介紹了PHP面向?qū)ο笪宕笤瓌t之開放-封閉原則(OCP),簡單分析了PHP面向?qū)ο箝_放-封閉原則(OCP)的概念、原理、使用方法及相關(guān)注意事項,需要的朋友可以參考下2018-04-04
PHP消息隊列實現(xiàn)及應(yīng)用詳解【隊列處理訂單系統(tǒng)和配送系統(tǒng)】
這篇文章主要介紹了PHP消息隊列實現(xiàn)及應(yīng)用,結(jié)合實例形式詳細(xì)分析了php消息隊列的概念、原理及隊列處理訂單系統(tǒng)和配送系統(tǒng)案例,需要的朋友可以參考下2019-05-05
PHP n個不重復(fù)的隨機(jī)數(shù)生成代碼
PHP n個不重復(fù)的隨機(jī)數(shù)生成代碼,原理就是將數(shù)組順序隨即打亂 ,然取該數(shù)組中的某一段2009-06-06
PHP新手用的Insert和Update語句構(gòu)造類
PHP新手用的Insert和Update語句構(gòu)造類,沒多大功能,學(xué)習(xí)php的朋友可以參考下2012-03-03

