strtr、str_replace、preg_replace_PHP チュートリアルの効率を比較する
以前に strtr のソース コードを分析しました。ここで、strtr、str_replace、preg_replace の効率を比較してみましょう:
$str =
'111111110000000000000000000000 00000000011 1000001000100010000010010000010010000010100000010
';
$str = str_repeat($ str, 1);
$pattern1 = array('12345'=>'', '67891'=>'');
$pattern2 = array('a'=>' ', '1234567890'=> ;'');
$pattern3 = '/12345|67891/';
$pattern5 = '/a|1234567891'; ;
$pattern6 = array( 'a', '1234567890');
$t = microtime(true);
{
strtr($str, $)パターン 1);
エコー マイクロタイム(true)-$t, "/n"; //0.21915886878967 0.47268319129944
$t =
for($i $pattern2);
echo microtime(true)-$t, "/n"; //0.4768660068512 2.7257590293884
$t = microtime(true); $ i++)
{
preg_replace($pattern3, '', $str);
}
echo microtime(true)-$t, "/n" //0.30504012107849 1.0864448547363
$t = microtime(true); $i =0; $i{
preg_replace($pattern4, '', $str);
echo microtime(true)-$t, //0.30298089981079
$t = microtime(true);
for($i=0; $i{
str_replace($pattern5, '', $str);
echo microtime(true)-$t; , " /n"; //0.18029189109802 0.22510504722595
$t = microtime(true);
for($i=0; $i{
str_replace($pattern6, '', $str);
}
echo microtime(true)-$t, "/n"; //0.18104100227356 0.23055601119995
//説明: str_repeat の 2 番目のパラメータが 1 の場合は最初の数値が出力され、8 の場合は 2 番目の数値が出力されます。が出力されます
出力結果から判断すると、str_replace の全体的なパフォーマンスは strtr や preg_replace よりも優れています。その理由は、str_replace のソース コード (http://code.google.com/p/cyy0523xc/source/browse/trunk/php/str_replace%E6%BA%90%E7%A0%81) を見るとわかります。 c)、str_replace(array search, string|array replace, string subject) が実行されると、検索の各要素を順番にループします (添字やその他の順序に従っていません。これは、 array)、次に、一致する件名に移動し、見つかった場合は、対応する置換で置き換えます。この時点で添字文字列の長さが大幅に変化し、対象文字列が比較的長い場合、添字の最大長から最小長までのループが 1 つ増えるため、これは確かに strtr よりも効率的です。ここでのオーバーヘッドも比較的大きくなります。ただし、str_replace の実装には注意が必要です。strtr のように最大一致が優先されるわけではありません。例:
コードをコピー
コードは次のとおりです:
str_replace(array('ab', 'abc'), '1', 'abcd');
strtr が使用される場合、strtr は最大の一致を達成するため、出力結果は「1d」になります。ただし、検索文字列では「ab」が「abc」より前にランク付けされているため、str_replace は「1cd」を出力します。そのため、「ab」は最初に「1」に置き換えられます。
ここで、これら 3 つの関数の使用法を要約しましょう:
str_replace: これは文字列置換の推奨方法ですが、注意すべき点が 1 つあります。それは、最も一致させたい要素を前に置くことです。 。 (効率を向上させるために、これを行う価値がある場合もあります)
strtr: strtr は、短い文字列を置換する場合にも非常に効率的ですが、検索配列の添え字の長さの違いも、検索配列に比較的大きな影響を与えます。また、strtr(string, string, string) という形式は使用しないことをお勧めします (半角文字以外では文字化けが発生しやすいため)。
preg_replace: 言うまでもなく、間違いなく最も強力な機能である通常のマッチングを使用できますが、効率をある程度犠牲にする必要があります。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

C++ 関数のデフォルト パラメーターの利点には、呼び出しの簡素化、可読性の向上、エラーの回避などがあります。欠点は、柔軟性が限られていることと、名前の制限があることです。可変引数パラメーターの利点には、無制限の柔軟性と動的バインディングが含まれます。欠点としては、複雑さの増大、暗黙的な型変換、デバッグの難しさなどが挙げられます。

カスタム PHP 関数と定義済み関数の違いは次のとおりです。 スコープ: カスタム関数はその定義のスコープに限定されますが、事前定義関数はスクリプト全体からアクセスできます。定義方法: カスタム関数は function キーワードを使用して定義されますが、事前定義関数は PHP カーネルによって定義されます。パラメータの受け渡し: カスタム関数はパラメータを受け取りますが、事前定義された関数はパラメータを必要としない場合があります。拡張性: カスタム関数は必要に応じて作成できますが、事前定義された関数は組み込みで変更できません。

C++ の例外処理は、特定のエラー メッセージ、コンテキスト情報を提供し、エラーの種類に基づいてカスタム アクションを実行するカスタム例外クラスを通じて強化できます。 std::Exception から継承した例外クラスを定義して、特定のエラー情報を提供します。カスタム例外をスローするには、throw キーワードを使用します。 try-catch ブロックでdynamic_castを使用して、キャッチされた例外をカスタム例外タイプに変換します。実際の場合、open_file 関数は FileNotFoundException 例外をスローします。例外をキャッチして処理すると、より具体的なエラー メッセージが表示されます。

Go の関数にマップを渡すと、デフォルトでコピーが作成され、コピーへの変更は元のマップには影響しません。元のマップを変更する必要がある場合は、ポインタを介してそれを渡すことができます。空のマップは技術的には nil ポインターであり、空ではないマップを期待する関数に空のマップを渡すとエラーが発生するため、空のマップは慎重に扱う必要があります。
