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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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;}}}#出力 上記のコードの出力は、単純に次のように結論付けることができます:finally の前に return が実行されます。バイトコード レベルで何が起こるかを見てみましょう。以下は、case1 メソッドのバイトコードの一部をインターセプトし、ソース コードを比較して、各命令の意味に注釈を付けます。

C# の Array.Sort 関数を使用して配列を並べ替える C# の Array.Sort 関数を使用して配列を並べ替える Nov 18, 2023 am 10:37 AM

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 Jun 27, 2023 pm 01:48 PM

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 Jun 26, 2023 pm 01:41 PM

PHP には、配列操作をより便利かつ高速にする強力な配列関数が多数あります。 2 つの配列を結合して連想配列にする必要がある場合、PHP の array_combine 関数を使用してこの操作を実行できます。この関数は、実際には、ある配列のキーを別の配列の値として新しい連想配列に結合するために使用されます。次に、PHP の array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法を説明します。 array_comb について学ぶ

Vue3 はセットアップ構文シュガーをどのように使用して return の書き込みを拒否しますか Vue3 はセットアップ構文シュガーをどのように使用して return の書き込みを拒否しますか May 12, 2023 pm 06:34 PM

Vue3.2 セットアップ構文シュガーは、単一ファイル コンポーネント (SFC) で結合された API を使用して、Vue3.0 の面倒なセットアップを解決するコンパイル時構文シュガーです。宣言された変数、関数、インポートによって導入されたコンテンツは、インポートによって公開されます。使用上の問題点 1. 宣言した変数、関数、import で導入した内容を使用中に return する必要はなく、糖衣構文を使用することができます。 // 導入した内容をインポート import{getToday }from'./utils'//variable constmsg='Hello !'//function func

JavaScript関数の戻り値とreturn文の詳しい解説 JavaScript関数の戻り値とreturn文の詳しい解説 Aug 04, 2022 am 09:46 AM

JavaScript 関数は、外部と対話するための 2 つのインターフェースを提供し、パラメータは外部情報を受け取る入り口として機能し、戻り値は演算結果を外部にフィードバックする出口として機能します。次の記事では、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