strtr 関数の解析における効率の問題_PHP チュートリアル
最近、文字列の一致と置換が必要になることが多く、以前は str_replace か preg_replace を使用していましたが、strtr が効率的だと言われているので、比較してみました。
$str = strtr(md5($i), $p2);
}
var_dump( microtime(true)-$t ; var_dump(microtime(true)-$t); //0.09863805770874
結果は、strtr が preg_replace よりも約 15% 効率的であることを示しています。 strtrのPHPソースコードを確認しました。コードは次のとおりです{furned_param_count; str)、HASH_OF(*from));
Convert_to_string_ex(to);
(str), Z_STRLEN_PP(str), 1); php_strtr(Z_STRVAL_P(return_value),
STRLEN_PP(from)、
)));
}
}
まず php_strtr 関数を見てみましょう:
xlat[(unsigned char) str_from[i]] = str_to[i];
}
}
なぜなら、置換する必要がある文字がこの場合、(i = 0; i < len; i++) {
のような演算を最初に判断してから値を割り当てる方が効率的です。 strtr('abcdaaabcd', 'ab', 'efd') は非常に効率的であるはずです。
(注: この操作では ecdeeefcd が出力されます)
php_strtr_array をもう一度見てください:
コードをコピーします
コードは次のとおりです:
static void php_strtr_array(zval *return_value, char *str, int slen, HashTable *hash)
{
zval **entry; **trans;
zval ctmp;
ulong num_key;
int minlen = 128*1 024;
int maxlen = 0, pos, len, found; HashTable tmp_hash;
//置換配列を tmp_hash にコピーし、添字文字列の最大長と最小長を記録します。 use using ‐ の tmp tmp t-n tmp tmp_hash hash, (void **) & Entry, & HPOS) == 成功) {
Switch (Zend_hash_get_current_key_ex (Hash, & String_key, & String_LEN, & Num_key) {
CAS) e have_key_is_string:
len = string_key_len-1 ;
if (len & lt; 1) {
e (&tmp_hash);
zend_hash_add(&tmp_hash、string_key、string_key_len、entry、sizeof(zval*)); maxlen = len) {
case hash_key_is_long:z_type(ctmp)= is_long; }
found = 0; >'f')、最初に a を e に置き換えるのではなく、最初に ab を f に置き換えます。and(zend_hash_find(&tmp_hash、key、len+1)==成功){zval tmp;
if(z_type_pp(trans)!= is_String){
strue
}
);
zend_hash_destroy(&tmp_hash);
http://www.bkjia.com/PHPjc/327900.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/327900.html
技術記事
最近、文字列の一致と置換が必要になることが多いです。以前は str_replace または preg_replace を使用することが多かったです。strtr が効率的だと言われているので、以下のようにコードをコピーします。

ホット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)

ホットトピック











MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

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++ 関数の参照パラメーター (基本的には変数のエイリアス、参照を変更すると元の変数が変更されます) とポインター パラメーター (元の変数のメモリ アドレスを保存し、ポインターを逆参照して変数を変更します) は、変数を渡したり変更したりするときに使用方法が異なります。参照パラメーターは、コンストラクターまたは代入演算子に渡されるときのコピーのオーバーヘッドを避けるために、元の変数 (特に大きな構造体) を変更するためによく使用されます。ポインター パラメーターは、メモリの場所を柔軟に指定したり、動的データ構造を実装したり、オプションのパラメーターを表すために null ポインターを渡したりするために使用されます。
