PHP は反復を使用してフォルダー関連の操作 (コピー、削除など) を実装します。
この記事では、主に、反復に基づいてフォルダーのコピー、削除、サイズの確認などの操作を実現するための PHP の方法を紹介します。反復の原理を簡単に説明し、フォルダーのコピー、削除、サイズの確認を実現するための反復アルゴリズムの使用方法を分析します。一般的な操作の関連実装スキルについては、必要な友人が参照できるようにします
この記事では、PHP が反復に基づいてフォルダーのコピー、削除、サイズ表示などの操作を実装する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
前回の記事 PHP は、フォルダーのコピー、削除、サイズのチェック操作を再帰的に実装します。 ここでは、反復操作のテクニックを分析してみましょう。
「再帰でうまく解決できるのに、なぜ反復を使うのですか?」主な理由は効率の問題です...
再帰の概念は、関数自体を呼び出して、複雑な問題を複数の類似したサブ問題に分解して解決することです。これにより、コードの量が大幅に削減され、プログラムが非常にエレガントに見えるようになります。 。
システムは関数呼び出しごとに実行領域を割り当て、スタックプッシュを使用してそれを記録するためです。関数呼び出しが終了した後、システムはスペースを解放し、スタックをポップしてブレークポイントを復元する必要があります。したがって、再帰のコストは依然として比較的大きいです。
たとえ言語設計が関数呼び出しを完全に最適化しており、再帰によって引き起こされるリソースの無駄が無視できる場合でも、再帰の深さは依然としてシステムのスタック容量によって制限され、そうでない場合は StackOverflowError がスローされます。
そして、繰り返し処理に適したコンピュータの特性をうまく利用できるのが反復であり、理論的にはすべての再帰関数を反復関数に変換できるので、再帰なしでできる場合はiteration replaceを使います。
フォルダーのサイズを表示
反復の考え方は、コンピューターに一連の命令を繰り返し実行させることです。この一連の命令が実行されるたびに、他の新しい値が元の値から導出されます。変数の... これを繰り返します。 終了条件に達するか、新しい値が生成されなくなるまで、プロセスが続行されます。
再帰はループとスタックに相当するため、スタックを反復で使用して再帰と反復を変換できます。
/** * 文件夹大小 * @param $path * @return int */ function dirsize($path) { /* 初始条件 */ $size = 0; $stack = array(); if (file_exists($path)) { $path = realpath($path) . '/'; array_push($stack, ''); } else { return -1; } /* 迭代条件 */ while (count($stack) !== 0) { $dir = array_pop($stack); $handle = opendir($path . $dir); /* 执行过程 */ while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_path = $path . $dir . $item; if (is_file($_path)) $size += filesize($_path); /* 更新条件 */ if (is_dir($_path)) array_push($stack, $dir . $item . '/'); } closedir($handle); } return $size; }
フォルダをコピー
反復も再帰も、変数の初期化、終了条件の判断、実際の操作の実行、新しい変数の生成という4つのステップがありますが、場所が異なります。
たとえば、変数を初期化するステップは反復では関数の先頭にありますが、再帰では他の関数にパラメータを渡すプロセスを指します
終了条件を判断するステップは反復で使用されます。再帰の終了位置を決定するために再帰で使用されるループ Continue かどうかを判断します。
新しい変数を生成するステップの前に、実際の操作を実行することが再帰と反復の両方において関数の中心部分です。は反復の継続の条件です。再帰では、次の再帰の基礎となり、新しい変数の生成により再帰または反復が継続します。
/** * 复制文件夹 * @param $source * @param $dest * @return string */ function copydir($source, $dest) { /* 初始条件 */ $stack = array(); $target = ''; if (file_exists($source)) { if (!file_exists($dest)) mkdir($dest); $source = realpath($source) . '/'; $dest = realpath($dest) . '/'; $target = realpath($dest); array_push($stack, ''); } /* 迭代条件 */ while (count($stack) !== 0) { $dir = array_pop($stack); $handle = opendir($source . $dir); if (!file_exists($dest . $dir)) mkdir($dest . $dir); /* 执行过程 */ while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_source = $source . $dir . $item; $_dest = $dest . $dir . $item; if (is_file($_source)) copy($_source, $_dest); /* 更新条件 */ if (is_dir($_source)) array_push($stack, $dir . $item . '/'); } closedir($handle); } return $target; }
フォルダーを削除します 言語機能はさておき、パフォーマンスに最も影響を与えるのは、通常、不適切な設計によって引き起こされる冗長コードです。
ほとんどの場合、再帰には反復よりも冗長なコードが含まれます。これも再帰の効率が低い主な要因です。
しかし、再帰コードが十分に簡潔で、冗長性が十分に低い場合、反復のパフォーマンスは再帰のパフォーマンスより高くない可能性があります。
たとえば、反復を使用して実装されたこのフォルダー削除関数は、再帰よりも 20% 遅くなります。主な理由は、再帰ではフォルダーにサブフォルダーがない場合、すべてのファイルと現在のフォルダーを直接削除するためです。再帰が終了します。
反復中にフォルダーが空であっても、削除する前に次の反復でフォルダーが空であるかどうかを判断してスタックに保存する必要があります。再帰に比べて、ファイルが空であると判断してスタックに格納し、反復を取り出すなどの冗長な操作が多いため、処理速度は再帰より遅くなります。
/** * 删除文件夹 * @param $path * @return bool */ function rmdirs($path) { /* 初始化条件 */ $stack = array(); if (!file_exists($path)) return false; $path = realpath($path) . '/'; array_push($stack, ''); /* 迭代条件 */ while (count($stack) !== 0) { $dir = end($stack); $items = scandir($path . $dir); /* 执行过程 */ if (count($items) === 2) { rmdir($path . $dir); array_pop($stack); continue; } /* 执行过程 */ foreach ($items as $item) { if ($item == '.' || $item == '..') continue; $_path = $path . $dir . $item; if (is_file($_path)) unlink($_path); /* 更新条件 */ if (is_dir($_path)) array_push($stack, $dir . $item . '/'); } } return !(file_exists($path)); }
実行時間の表示これは、コードの実行時間(ミリ秒)を表示し、コールバックを通じて対象のコード(または関数)を実行し、最終的に実行時間(ミリ秒)を計算する関数です。このツールを使用すると、機能間のパフォーマンスの差を比較できます。これは非常にシンプルで実用的なツールです。
りー
以上がPHP は反復を使用してフォルダー関連の操作 (コピー、削除など) を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
