php無限極分類遞歸
❶ 感覺php的遞歸好難啊,特別是無限級分類,怎樣可以很容易理解遞歸,理解無限級分類呀
遞歸很好理解啊,一般情況下都是用階乘來入門的。
無級分類演算法是典型的遞歸操作。但在實際開發一般用偽無級分類,無級分類當分類級次多,每個分類節點多的情況下效率不高。因此作為學數據結構演算法,需要學一下無級分類的演算法,如果是實際開發,用偽無級分類好一些。
❷ PHP 無限級分類, 二維數組, 遞歸調用問題
$subs = array();
表示定義並初始化一個數組,
這樣後面的循環里就可以對這個數組進行操作,比如添加數據,
不加也能正常工作,但是不推薦,
初始化變數是一個良好的開發習慣
❸ php無限極分類實現的方法
初始化的數據
//初始化原始數據(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');
顯示樹結構
functionprintTree($data,$level=0){foreach($dataas$key=>$value){for($i=0;$i<=$level;$i++){echo'  ';
}echo$value['name'];echo'<br>';if(!empty($value['children'])){
printTree($value['children'],$level+1);
}
}
}
使用遞歸的方式獲取無限極分類數組
functiongetNodeTree(&$list,&$tree,$pid=0){foreach($listas$key=>$value){if($pid==$value['pid']){
$tree[$value['id']]=$value;unset($list[$key]);
getNodeTree($list,$tree[$value['id']]['children'],$value['id']);
}
}
}
使用引用-無限極分類
functioncreateNodeTree(&$list,&$tree){foreach($listas$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);
❹ php 遞歸問題,想要將數據按照無限極分類的樣式顯示出來
首先 將json 解碼成數組, 用json_decode 函數 注意 一定要加上第二個參數 否則他會返回一個對象。接下來就是地遞歸了。這是一個最簡單的遞歸只要逐個遍歷即可。
下面是完整的代碼:
$data=json_decode($str,true);
$options=getChildren($data);
functiongetChildren($parent,$deep=0){
foreach($parentas$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;
}
?>
<selectname=""id="">
<?phpforeach($optionsas$row){?>
<optionvalue="<?phpecho$row['id']?>"><?phpechostr_pad("",$row['deep']*3,"-",STR_PAD_RIGHT);?><?phpecho$row['name'];?></option>
<?php}?>
</select>
以上代碼已測試通過 效果圖如下
❺ PHP遞歸無限分類的 如何統計總條數 以及對顯示的結果進行分頁比如設置為每頁顯示10個 。
每個節點都要記錄子節點的數量c。每新增一個節點都要對各父和祖節點的子節點計數加1。這樣根節點會有總數的記錄。
這樣遞歸遍歷時也可以根據子節點數量c的來確定讀取的數量限制。比如 讀取條數計數<10 就繼續遞歸
在每個節點的表上 增加子節點的id集或計數,增加根節點到父節點路徑,會方便這些操作。
❻ php遞歸無限極分類怎麼弄
給個函數你,調用get_category()就是一個數組格式的結果
function get_category($parent_id=0){
$arr=array();
$sql = "select * from category where parent_id=$parent_id";//查詢子級數據
$result = array(a_object,b_object,,,)=sql_query($sql);//查詢結果一個數組或列表格式,自己完善。
if($result){
foreach($result as $re){//循環數組
if(get_category($re.id))//如果子級不為空
$re['child'] = get_category($re.id);
$arr[] = $re;
}
return $arr;
}
❼ php 幾種常用的遞歸 無限極分類
/**
*遞歸實現無限極分類
*@param$array分類數據
*@param$pid父ID
*@param$level分類級別
*@return$list分好類的數組直接遍歷即可$level可以用來遍歷縮進
*/
functiongetTree($array,$pid=0,$level=0){
//聲明靜態數組,避免遞歸調用時,多次聲明導致數組覆蓋
static$list=[];foreach($arrayas$key=>$value){//第一次遍歷,找到父節點為根節點的節點也就是pid=0的節點
if($value['pid']==$pid){//父節點為根節點的節點,級別為0,也就是第一級
$value['level']=$level;//把數組放到list中
$list[]=$value;//把這個節點從數組中移除,減少後續遞歸消耗
unset($array[$key]);//開始遞歸,查找父ID為該節點ID的節點,級別則為原級別+1
getTree($array,$value['id'],$level+1);
}
}
❽ 急求PHP遞歸無限分類,當前位置寫法
<?php
$testArray = array();
function getSort($num,&$testArray){
$db = new mysqli("localhost","root","123456","test");
$sql = "select * from test where bid=".$num;
$result = $db->query($sql);
if($result){
$search = array();
while($row=$result->fetch_assoc()){
$testArray[] = $row['cloumnsname'];
$search[] = $row['id'];
}
foreach($search as $key=>$value){
getSort($value,$testArray);
}
}
}
$testArray[] = "首頁";
getSort(0,$testArray);
$test = implode(">",$testArray);
echo $test;
?>
有不懂的可以問我!
❾ php無限分類 遞歸中的靜態數組
將靜態數組改為局部數組
❿ php無限極分類遞歸寫入多維數組的方法
$catearray[$row->id] = array($row->id,$row->name,$row->depth));
或
$catearray[$level][$row->id] = array($row->id,$row->name,$row->depth));