/**
站在用戶的角度思考問題,與客戶深入溝通,找到鏡湖網站設計與鏡湖網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網站建設、網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣、域名與空間、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋鏡湖地區(qū)。
*?遞歸實現(xiàn)無限極分類
*?@param?$array?分類數據
*?@param?$pid?父ID
*?@param?$level?分類級別
*?@return?$list?分好類的數組?直接遍歷即可?$level可以用來遍歷縮進
*/
function?getTree($array,?$pid?=0,?$level?=?0){
//聲明靜態(tài)數組,避免遞歸調用時,多次聲明導致數組覆蓋
static?$list?=?[];????????foreach?($array?as?$key?=?$value){????????????//第一次遍歷,找到父節(jié)點為根節(jié)點的節(jié)點?也就是pid=0的節(jié)點
if?($value['pid']?==?$pid){????????????????//父節(jié)點為根節(jié)點的節(jié)點,級別為0,也就是第一級
$value['level']?=?$level;????????????????//把數組放到list中
$list[]?=?$value;????????????????//把這個節(jié)點從數組中移除,減少后續(xù)遞歸消耗
unset($array[$key]);????????????????//開始遞歸,查找父ID為該節(jié)點ID的節(jié)點,級別則為原級別+1
getTree($array,?$value['id'],?$level+1);
}
}
初始化的數據
//初始化原始數據(id=編號,name=顯示名稱,pid=父級目錄id,sort=排序順序)$data[1]?=?array('id'='1','name'='一級目錄A','pid'='0','sort'='1');
$data[2]?=?array('id'='2','name'='一級目錄B','pid'='0','sort'='2');
$data[3]?=?array('id'='3','name'='一級目錄C','pid'='0','sort'='3');
$data[4]?=?array('id'='4','name'='一級目錄D','pid'='0','sort'='4');
$data[5]?=?array('id'='5','name'='二級目錄A-1','pid'='1','sort'='1');
$data[6]?=?array('id'='6','name'='二級目錄A-2','pid'='1','sort'='2');
$data[7]?=?array('id'='7','name'='二級目錄A-3','pid'='1','sort'='3');
$data[8]?=?array('id'='8','name'='二級目錄B-1','pid'='2','sort'='1');
$data[9]?=?array('id'='9','name'='二級目錄B-2','pid'='2','sort'='2');
$data[10]?=?array('id'='10','name'='二級目錄B-3','pid'='2','sort'='3');
$data[11]?=?array('id'='11','name'='二級目錄C-1','pid'='3','sort'='2');
$data[12]?=?array('id'='12','name'='二級目錄D-1','pid'='4','sort'='1');
$data[13]?=?array('id'='13','name'='二級目錄D-2','pid'='4','sort'='2');
$data[14]?=?array('id'='14','name'='三級目錄A-2-1','pid'='6','sort'='1');
$data[15]?=?array('id'='15','name'='三級目錄A-2-2','pid'='6','sort'='2');
$data[16]?=?array('id'='16','name'='三級目錄C-1-1','pid'='11','sort'='1');
$data[17]?=?array('id'='17','name'='三級目錄B-2-1','pid'='9','sort'='2');
顯示樹結構
function?printTree($data,$level=0){????foreach($data?as?$key=$value){????????for($i=0;$i=$level;$i++){????????????echo?'emsp;emsp;';
}????????echo?$value['name'];????????echo?'br';????????if(!empty($value['children'])){
printTree($value['children'],$level+1);
}
}
}
使用遞歸的方式獲取無限極分類數組
function?getNodeTree($list,$tree,$pid=0){????foreach($list?as?$key=$value){????????if($pid?==?$value['pid']){
$tree[$value['id']]=$value;????????????unset($list[$key]);
getNodeTree($list,$tree[$value['id']]['children'],$value['id']);
}
}
}
使用引用-無限極分類
function?createNodeTree($list,$tree){????foreach($list?as?$key=$node){????????if(isset($list[$node['pid']])){
$list[$node['pid']]['children'][]?=?$list[$key];
}else{
$tree[]?=?$list[$node['id']];
}
}
}
調用
//遞歸-無限極分類調用getNodeTree($data,$tree);
printTree($tree);//使用引用-無限極分類調用createNodeTree($data,$tree);
printTree($tree);
首先 將json 解碼成數組, 用json_decode 函數 注意 一定要加上第二個參數 否則他會返回一個對象。接下來就是地遞歸了。這是一個最簡單的遞歸只要逐個遍歷即可。
下面是完整的代碼:
$data=?json_decode($str,true);
$options?=?getChildren($data);
function?getChildren($parent,$deep=0)?{
foreach($parent?as?$row)?{
$data[]?=?array("id"=$row['id'],?"name"=$row['name'],"pid"=$row['parentid'],'deep'=$deep);
if?($row['childs'])?{
$data?=?array_merge($data,?getChildren($row['childs'],?$deep+1));
}
}
return?$data;
}
?
select?name=""?id=""
?php??foreach?($options?as?$row)?{??
option?value="?php?echo?$row['id']??"?php?echo?str_pad("",$row['deep']*3,?"-",STR_PAD_RIGHT);???php?echo?$row['name'];??/option
?php?}??
/select
以上代碼已測試通過 效果圖如下
問題太過籠統(tǒng),給你一個無限極分類數據處理的一種解決方案吧
表結構
id int 主鍵
fid int 父級id, 頂級分類的fid設為0, 其它級別的分類的fid值為其父級分類的id
name char 分類名稱
若是要顯示整個分類列表,那么你讀取整個表, 形成一個這樣結構的數組
$list = array();
while( $row = mysql_fetch_assoc($ret) ){
if( !isset($list[$row['fid']]) ) $list[$ret['fid']] = array();
$list[$ret['fid']][$ret['id']] = $row;
}
輸出時用個遞歸就可以了, 把它轉換成json,用js來做樹形菜單那也很好控制
若是查某個分類下的子分類,那查詢很簡單,就不說了
網站欄目:php無線級輸出數據,php輸出數據類型
文章URL:http://vcdvsql.cn/article18/hecidp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站排名、企業(yè)網站制作、網站內鏈、、App設計、網站維護
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)