php類遞歸
1. php遞歸獲取目錄內文件封裝類分享
php遞歸獲取目錄內文件封裝類分享,可以遞歸子目錄
代碼如下:
代碼如下:
function
readFileFromDir($dir)
{
if
(!is_dir($dir))
{
return
false;
}
//打開目錄
$handle
=
opendir($dir);
while
(($file
=
readdir($handle))
!==
false)
{
//排除掉當前目錄和上一個目錄
if
($file
==
"."
||
$file
==
"..")
{
continue;
}
$file
=
$dir
.
DIRECTORY_SEPARATOR
.
$file;
//如果是文件就列印出來,否則遞歸調用
if
(is_file($file))
{
print
$file
.
'<br
/>';
}
elseif
(is_dir($file))
{
readFileFromDir($file);
}
}
}
調用方式:
代碼如下:
$dir
=
'/home/www/test';
readFileFromDir($dir);
查看php手冊的話,還有一個方法scandir也可以使用,不過這個方法會一次性獲取單級目錄下的所有文件,存放到數組里,如果目錄里的文件比較多的話,會卡。
2. PHP怎麼遞歸
下面我舉一個其他的例子,雖然不是族譜,但是原理都是一樣的。
在一些復雜的系統中,要求對信息欄目進行無限級的分類,以增強系統的靈活性。那麼PHP是如何實現無限級分類的呢?我們在本文中使用遞歸演算法並結合mysql數據表實現無限級分類。
遞歸,簡單的說就是一段程序代碼的重復調用,當把代碼寫到一個自定義函數中,將參數等變數保存,函數中重復調用函數,直到達到某個條件才跳出,返回相應的數據。
Mysql
首先我們准備一張數據表class,記錄商品分類信息。表中有三個欄位,id:分類編號,主鍵自增長;title:分類名稱;pid:所屬上級分類id。
class表結構:
CREATE TABLE IF NOT EXISTS `class` (
`id` mediumint(6) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`pid` mediumint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
插入數據後,如圖:
如果要輸出json格式的數據,則可使用:
echo json_encode($list);
3. 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;
}
4. php遞歸的方法求和1+2+3+...+n
<?php
function add($n)
{
$result = 0;
for($i=1;$i<$n+1;$i++)
{
$result += $i;
}
return $result; 返回計算結果
}
echo add(5); //調用上面的函數
?>
5. 如何理解php中的遞歸函數 (詳細講解)
遞歸其實就是「一個函數的自調用」
在這個「自調用」的過程中,必須要有一個變化的「參數」,當這個「參數」達到你的期望值的時候,終止該「自調用」過程
拿樓主的程序來說
demo($n)內部又有調用demo($n-1),構成了「自調用」
且,$n又有一個「期望值」,即是$n>1,不滿足此條件時,該自調用終止
即是說,最後一個執行的demo是demo($n9-1),其中$n9=2,然後返回為1(因為執行了return 1)
則$n9*demo($n9-1)即等於 2*demo(2-1),又等於2*1=2;
則$n8*demo($n8-1)即等於 3*demo(3-1),又等於3*2=6;
則$n7*demo($n7-1)即等於 4*demo(4-1),又等於4*6=24;
……
依次類推
這樣想:
demo(1)是等於1,這個沒有疑問吧?
然後demo(2)等於2*demo(1)=2*1=2
然後demo(3)等於3*demo(2)=3*2=6
……
一直到demo(10)
6. php中用遞歸函數計算出16的4次方
functionfunc($x,$n)
{
if搏枯握($n<=0)
敗碰return1;
基慶return$x*func($x,$n-1);
}
echofunc(16,4);
7. php寫函數 根據子類(id)遞歸查找頂級父類(id) 返回父類名字 (表結構:id name pid)
你這種表結構叫鄰接緩租表,查詢或皮的方式通過自連接。如
SELECTt1.nameASlev1,t2.nameaslev2,t3.nameaslev3,t4.nameaslev4
FROMTbnameASt1
LEFTJOINTbnameASt2ONt2.pid=t1.id
LEFTJOINTbnameASt3ONt3.pid=t2.id
LEFTJOINTbnameASt4ONt4.pid=t3.id
WHEREt1.name='XXXX'
這種方法的主要局限是你需要為每層數據添加一個自連接,隨著層次的增加,自連接
變得越來越復雜,檢索的性能自然而然的也就下降了。當然這種結構在查詢前必須知道該節點所處的層級,否則無法確定自連接的深度。
鄰接表模型衫哪差的局限性很大,用純SQL實現有一定的難度。不妨考慮其他模型,比如嵌套模型。
嵌套模型的基本結構是樹型結構,SQL檢索比鄰接表要方便很多。
關於嵌套模型,PHPChina的第一期電子雜志PHPer也有過深入探討,請參考!