ホームページ >バックエンド開発 >PHPチュートリアル >PHP は再帰関数を使用して複数レベルのディレクトリを作成します
この記事では主に PHP での再帰関数の使用法を紹介し、興味のある方はぜひ参考にしてください。
詳細は以下の通りです:
function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告。 echo $dir."创建成功<br>"; //输出创建成功的目录 }else{ $dirArr=explode('/',$dir); //当子目录没创建成功时,试图创建父目录,用explode()函数以'/'分隔符切割成一个数组 array_pop($dirArr); //将数组中的最后一项(即子目录)弹出来, $newDir=implode('/',$dirArr); //重新组合成一个文件夹字符串 Directory($newDir); //试图创建父目录 if(@mkdir($dir,0777)){ echo $dir."创建成功<br>"; } //再次试图创建子目录,成功输出目录名 } } Directory("A/B/C/D/E/F");
出力結果は図の通りです:
しかしマニュアルのファイル関数を見ると、書くのが面倒であることがわかります。 dirname() 関数。プロトタイプは次のとおりです。
string dirname ( string $path )
ファイルへのフルパスを含む文字列を指定すると、この関数はディレクトリ名を返します。ファイル名を削除した後。
Windows では、スラッシュ (/) とバックスラッシュ () の両方をディレクトリ区切り文字として使用できます。他の状況では、スラッシュ (/) になります。
はわずかに最適化できます:
function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ echo $dir."创建成功<br>"; }else{ Directory(dirname($dir)); if(@mkdir($dir,0777)){ echo $dir."创建成功<br>"; } } }
効果は同じです。
その後、インターネットで答えを検索したところ、非常に洞察力に富んだ答えを見つけました:
function Directory( $dir ){ return is_dir ( $dir ) or Directory(dirname( $dir )) and mkdir ( $dir , 0777); }
それでは、関数全体を説明しましょう:
まず、PHP の論理演算子の優先順位を紹介します: && > | | dir )) と mkdir ( $dir , 0777));
まず、対象のディレクトリが存在するかどうかを判断し、存在する場合は、 or の短絡特性に応じて、以下全体を短絡して実行します。対象のディレクトリが存在しない場合はスキップされます。次の関数本体を実行します: Directory(dirname( $dir )) と mkdir ( $dir , 0777)
考えてみました 目的最初に再帰を実行する: 最初に再帰を実行して、親ディレクトリ (dirname($dir)) が作成されたことを確認します。これにより、ファイルの作成時に親ディレクトリが見つからない場合でも、後続の mkdir() 関数は警告を発行しません。サブディレクトリ。 再帰の深さを入力後、最も深いルートディレクトリが存在することを確認した後、ルートディレクトリから下に向かって順番にディレクトリを作成していきます。
最後に、仕事を探している人は、オンラインで大企業の面接の質問を見つけて、行うことをお勧めします。結局のところ、試験はより包括的で詳細なものであり、知識を学ぶ際にもブラッシュアップする必要があります。あまりにも野心的すぎて成果が不十分になりやすいため、最初の関数を通常に使用できるようになるまでに何度か最適化しました。 これは、PHP でのマルチレベル ディレクトリの再帰的作成に関するインタビューの質問です。将来、編集者がいくつかの興味深いインタビューの質問を見つけて共有する予定です。
概要
: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。
関連する推奨事項: PHP で each 関数と list 関数を使用する方法
PHP の地理的位置の検索と距離の計算以上がPHP は再帰関数を使用して複数レベルのディレクトリを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。