當前位置:首頁 » 編程語言 » php遞歸分類

php遞歸分類

發布時間: 2022-09-28 03:29:32

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遞歸查詢不會,,求教。就是一個三級分類傳個ID找到他的上級,還有父級。。

這種類型的數據,一般資料庫中,一張表會有存在兩個欄位,一個是它本身id,另一個是它的父級parent_id。
既然要找到它的祖父級,sql語句這樣寫:
$id = empty($_POST['id'])?'':$_POST['id'];
$parent_id = get_parent_id($id);
$p_p_id = get_parent_id($parent_id);
function get_parent_id($id){
$sql = "select parent_id from ecs_table1 where id=" . $id;
return($GLOBALS['db']->getone($sql ));
}
遞歸,就是根據現有的id,重復取。
上面get_parent_id只是獲取父id,當然,你可以寫一個直接獲取祖父id的函數。
不過,現在大部分php網站,都只會有獲取父類的函數,想discuz,ecshop等。獲取祖父id,就是不斷的獲取該id的父id。

③ PHP 無限級分類, 二維數組, 遞歸調用問題

$subs = array();
表示定義並初始化一個數組,
這樣後面的循環里就可以對這個數組進行操作,比如添加數據,
不加也能正常工作,但是不推薦,
初始化變數是一個良好的開發習慣

④ 幾十萬條數據用PHP遞歸能實現無限級分類嗎

數據量大就使用分頁和非同步查詢,一次查詢全部出來 ,內存肯定是吃不消的,運行時間也會比較久。

⑤ php 遞歸分類 $arr = array() 具體作用

$arr = array(); 只是 定義 數組 而且是在 循環外邊定義的 當然不會清空數組,

就是在循環外邊定義一個數組
然後在 循環里邊 給它賦值。。

⑥ 什麼是php遞歸函數及簡單實例講解

遞歸其實就是「一個函數的自調用」 在這個「自調用」的過程中,必須要有一個變化的「參數」,當這個「參數」達到你的期望值的時候,終止該「自調用」過程 拿樓主的程序來說 demo($n)內部又有調用demo($n-1),構成了「自調用」 且,$n又有一個「期望值

⑦ php怎麼用遞歸做商城類三級導航菜單

字元串和數組方式無限級分類。

如 字元串

header('Content-type: text/html; charset=utf-8');
include_once('connect.php');
function get_str($id=0){
global $str;
$sql="select id,title from class where pid=$id";
$result=mysql_query($sql);
if($result&&mysql_affected_rows()){

$str.="<ul>";
while($row=mysql_fetch_array($result)){

$str.="<li>".$row['id']."--".$row['title']."</li>";
get_str($row['id']);
}
$str.="</ul>";
}
return $str;
}
echo get_str(0);

⑧ 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'&emsp;&emsp;';
}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遞歸無限分類的 如何統計總條數 以及對顯示的結果進行分頁比如設置為每頁顯示10個 。

每個節點都要記錄子節點的數量c。每新增一個節點都要對各父和祖節點的子節點計數加1。這樣根節點會有總數的記錄。
這樣遞歸遍歷時也可以根據子節點數量c的來確定讀取的數量限制。比如 讀取條數計數<10 就繼續遞歸
在每個節點的表上 增加子節點的id集或計數,增加根節點到父節點路徑,會方便這些操作。

熱點內容
phpmyadminlinux安裝 發布:2024-03-29 17:13:15 瀏覽:791
python中replace 發布:2024-03-29 17:08:17 瀏覽:651
mdb導入sql 發布:2024-03-29 17:07:36 瀏覽:127
java資料庫工具類 發布:2024-03-29 16:31:15 瀏覽:387
安卓機哪裡看型號 發布:2024-03-29 15:59:40 瀏覽:281
cad解壓錯誤 發布:2024-03-29 15:01:45 瀏覽:79
存儲指令集 發布:2024-03-29 14:39:27 瀏覽:649
資料庫表刪除數據 發布:2024-03-29 14:39:26 瀏覽:367
出c語言整除 發布:2024-03-29 14:28:22 瀏覽:572
芬尼壓縮機 發布:2024-03-29 14:24:11 瀏覽:464