首頁 後端開發 php教程 php遞迴實例

php遞迴實例

Jul 29, 2016 am 09:14 AM
array dirname return

    遞歸做為一種演算法在程式設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述解題過程所需的多次重複計算,大大減少了程式的程式碼量。

    以下舉4個遞歸的例子:

<?php
&#160;&#160; &#160;
&#160;&#160; &#160;/*
&#160;&#160; &#160;&#160;&#160; &#160;递归的实例
&#160;&#160; &#160;&#160;&#160; &#160;1、统计数组元素个数
&#160;&#160; &#160;&#160;   php也可以直接使用count($arr,1) 来计算多维数组的元素的个数
&#160;&#160; &#160;&#160;&#160; &#160;2、统计文件和文件夹数量
&#160;&#160; &#160;&#160;&#160; &#160;3、删除文件或文件夹
&#160;&#160; &#160;&#160;&#160; &#160;用到的系统函数:file_exists()检查目录或者文件是否存在 unlink()删除文件 rmdir()删除目录
&#160;&#160; &#160;&#160;&#160; &#160;4、无限极分类的排序
&#160;&#160; &#160;*/

&#160;&#160; &#160;/**
&#160;&#160; &#160;* 递归共计数组元素个数
&#160;&#160; &#160;* @param array $arr 统计的数组
&#160;&#160; &#160;* @return boolean|int&#160; 如果失败返回false,成功返回数组的元素个数
&#160;&#160; &#160;*/
&#160;&#160; &#160;function conarr($arr){
&#160;&#160; &#160;&#160;&#160; &#160;function funtmp($arr,$sum=0){
&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(is_array($arr)){
&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;$sum=count($arr);
&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}else{
&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;return count($arr);
&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}
&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;foreach($arr as $k=> $v){
                if(is_array($v)){
                    $sum += funtmp($v,$sum);
                }
            }
            return $sum;
        }
        return funtmp($arr);
    }
    // $arr = array(1,2,3,4,array(1,2,3,array(0,3)));
    // echo conarr($arr).'<br/>';
    // echo count($arr,1);

    /**
    * 递归统计指定目录的子文件的个数和文件夹个数
    * @param $dirname string 目录路径
    * @return array|boolean 返回包含子文件个数和文件夹个数的数组,失败返回false
    */
    function condir($dirname,$data = array('dirnum'=>0,'filenum'=>0)){
        if(!is_dir($dirname)){
            return false;
        }
        $dir = opendir($dirname); //打开句柄
        readdir($dir);//读取点
        readdir($dir);//读取点
        while($filename = readdir($dir)){
            $newfile = $dirname.'/'.$filename;//拼接子文件名
            if(is_dir($newfile)){
                $data['dirnum']++;
                $data['dirnum']+=condir($newfile)['dirnum'];
                $data['filenum']+=condir($newfile)['filenum'];
            }else{
                $data['filenum']++;
            }
        }
        return $data;
    }
    //$a =  condir('C:\wamp\www\test');
    //var_dump($a);

    /**
    * 删除文件或者文件夹
    * @param string $dirname 文件路径
    * @return boolean 删除成功返回true,失败返回false
    */
    function delDir($dirname){
        if(!file_exists($dirname)){return false;}
        if($dir = opendir($dirname)){
            while($filename = readdir($dir)){
                if($filename !="."&& $filename !='..'){
                    $subFile = $dirname.'/'.$filename;
                    if(is_dir($subFile)){
                        delDir($subFile);
                    }
                    if(is_file($subFile)){
                        unlink($subFile);
                    }
                }
            }    
            closedir($dir);
            rmdir($dirname);
        }
        if(!file_exists($dirname)){
            return true;
        }else{
            return false;
        }
    }
    //echo delDir('C:\wamp\www\test');


    //无限极分类排序,父类后跟子类
    function getlist($cate,$pid=0,$html="------",$i=0){
        $i++;
        $list = array();
        foreach($cate as $val){
            if($val['pid']==$pid){
                $val['html']=str_repeat($html,$i-1);
                $list[]=$val;
                $list = array_merge($list,getlist($cate,$val['id'],$html,$i));
            }
        }
        return $list;
    }
?>
登入後複製


以上就介紹了php遞歸實例,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C語言return的用法詳解 C語言return的用法詳解 Oct 07, 2023 am 10:58 AM

C語言return的用法有:1、對於傳回值類型為void的函數,可以使用return語句來提前結束函數的執行;2、對於傳回值型別不為void的函數,return語句的作用是將函數的執行結果傳回給呼叫者;3、提前結束函數的執行,在函數內部,我們可以使用return語句來提前結束函數的執行,即使函數並沒有回傳值。

Java中return和finally語句的執行順序是怎樣的? Java中return和finally語句的執行順序是怎樣的? Apr 25, 2023 pm 07:55 PM

原始碼:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}#輸出上述程式碼的輸出可以簡單地得出結論:return在finally之前執行,我們來看下字節碼層面上發生了什麼事情。下面截取case1方法的部分字節碼,並且對照源碼,將每個指令的含義註釋在

使用C#中的Array.Sort函數對陣列進行排序 使用C#中的Array.Sort函數對陣列進行排序 Nov 18, 2023 am 10:37 AM

標題:C#中使用Array.Sort函數對陣列進行排序的範例正文:在C#中,陣列是一種常用的資料結構,經常需要對陣列進行排序運算。 C#提供了Array類,其中有Sort方法可以方便地對陣列進行排序。本文將示範如何使用C#中的Array.Sort函數對陣列進行排序,並提供具體的程式碼範例。首先,我們要先了解Array.Sort函數的基本用法。 Array.So

如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組 如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組 Jun 26, 2023 pm 01:41 PM

在PHP中,有許多強大的陣列函數可以讓陣列的操作更加方便和快速。當我們需要將兩個陣列拼成一個關聯數組時,可以使用PHP的array_combine函數來實現這一操作。這個函數其實是用來將一個陣列的鍵當作另一個陣列的值,合併成一個新的關聯數組。接下來,我們將會講解如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組。了解array_comb

簡單明了的PHP array_merge_recursive()函式使用方法 簡單明了的PHP array_merge_recursive()函式使用方法 Jun 27, 2023 pm 01:48 PM

在進行PHP編程時,我們常常需要將數組合併。 PHP提供了array_merge()函數來完成數組合併的工作,但是當數組中存在相同的鍵時,函數會覆寫原來的值。為了解決這個問題,PHP在語言中還提供了一個array_merge_recursive()函數,該函數可以合併數組並保留相同鍵的值,使得程式的設計變得更加靈活。 array_merge

Vue3怎麼使用setup語法糖拒絕寫return Vue3怎麼使用setup語法糖拒絕寫return May 12, 2023 pm 06:34 PM

Vue3.2setup語法糖是在單文件組件(SFC)中使用組合式API的編譯時語法糖解決Vue3.0中setup需要繁瑣將聲明的變量、函數以及import引入的內容通過return向外暴露,才能在使用的問題1.在使用中無需return宣告的變數、函數以及import引入的內容,即可在使用語法糖//import引入的內容import{getToday}from'./utils'//變數constmsg='Hello !'//函數func

詳解JavaScript函數傳回值和return語句 詳解JavaScript函數傳回值和return語句 Aug 04, 2022 am 09:46 AM

JavaScript 函數提供兩個介面實現與外界的交互,其中參數作為入口,接收外界資訊;返回值作為出口,並將運算結果回饋給外界。以下這篇文章帶大家了解JavaScript函數回傳值,淺析下return語句的用法,希望對大家有幫助!

使用JavaScript中return關鍵字 使用JavaScript中return關鍵字 Feb 18, 2024 pm 12:45 PM

JavaScript中return的用法,需要具體程式碼範例在JavaScript中,return語句用來指定從函數傳回的值。它不僅可以用於結束函數的執行,還可以將一個值傳回給呼叫函數的地方。 return語句有以下幾個常見的用法:傳回一個值return語句可以用來傳回一個值給呼叫函數的地方。下面是一個簡單的範例:functionadd(a,b){

See all articles