php無限分類遞歸
① 幾十萬條數據用php遞歸能實現無限級分類嗎
數據量大就使用分頁和非同步查詢,一次查詢全部出來 ,內存肯定是吃不消的,運行時間也會比較久。
② PHP遞歸無限分類的 如何統計總條數 以及對顯示的結果進行分頁比如設置為每頁顯示10個 。
每個節點都要記錄子節點的數量c。每新增一個節點都要對各父和祖節點的子節點計數加1。這樣根節點會有總數的記錄。
這樣遞歸遍歷時也可以根據子節點數量c的來確定讀取的數量限制。比如 讀取條數計數<10 就繼續遞歸
在每個節點的表上 增加子節點的id集或計數,增加根節點到父節點路徑,會方便這些操作。
③ php遞歸無限分類縮進怎麼做 急啊
<?php
folder();
// 主要是 $tab 參數,該參數為當前分類縮進層次
function folder($parentid = 0, $tab = 0) {
$sql = "SELECT * FROM choin_article_sort WHERE parentid = '{$parentid}' ORDER BY id DESC";
$query = mysql_query($sql);
while ($rs = mysql_fetch_array($query)) {
// 輸出推薦使用 echo 命令
echo str_repeat('-', $tab); // 縮進填充符你可以自己設定,也可以是圖片等等
echo '中間循環出的內容';
folder($rs["id"], $tab + 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無限極分類實現的方法
初始化的數據
//初始化原始數據(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 幾種常用的遞歸 無限極分類
/**
*遞歸實現無限極分類
*@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 無限級分類, 二維數組, 遞歸調用問題
$subs = array();
表示定義並初始化一個數組,
這樣後面的循環里就可以對這個數組進行操作,比如添加數據,
不加也能正常工作,但是不推薦,
初始化變數是一個良好的開發習慣
⑧ PHP MYSQL 請教 2個欄位能無限分類嗎
沒懂你的CID,和scid 是什麼。
無限分類是無限的樹形結構么?
根據無限樹形結構說一下。一般情況下 是用遞歸調用來處理的。欄位中 用id 和parentid 兩個欄位。 假設有一個函數 fetch是取mysql 數據的。簡單寫一個函數
function getdata($parentid){
$tree=fetch("parentid = {$parentid}");
foreach($tree as $k=> $v){
$tree[$k]['children']=getdata($v['id']);
}
return $tree;
}
調用$tree=getdata(0);
$tree 就是樹形的。
當然 如果有用框架估計更簡單點。比如laravel 。定義一個$tree的模型,表中有id,和parentid兩欄位。模型中新增兩個函數
public function childrentree()
{
return $this->hasMany(get_class($this), 'parentid', 'id');
}
public function children()
{
return $this->childrentree();
}
然後使用
tree::with(["children"])->where('parentid', 0)->get(); 就可以獲取樹形菜單
⑨ 感覺PHP的遞歸好難啊,特別是無限級分類,怎樣可以很容易理解遞歸,理解無限級分類呀
遞歸很好理解啊,一般情況下都是用階乘來入門的。
無級分類演算法是典型的遞歸操作。但在實際開發一般用偽無級分類,無級分類當分類級次多,每個分類節點多的情況下效率不高。因此作為學數據結構演算法,需要學一下無級分類的演算法,如果是實際開發,用偽無級分類好一些。