現在の位置: ホーム> 最新記事一覧> PHPにおけるSTRCHR関数のパフォーマンス分析:どのシナリオが適用できますか?

PHPにおけるSTRCHR関数のパフォーマンス分析:どのシナリオが適用できますか?

gitbox 2025-06-04

1。strchr()関数の概要

strchr()は、phpの文字列関数です。その機能は、文字列でキャラクターが初めて表示される場所を見つけ、そのキャラクターの最初から文字列の終わりまですべてを返すことです。そのエイリアスはStrStr()であり、両方とも関数がほぼ同じです。

関数プロトタイプ:

 string strchr(string $haystack, mixed $needle, bool $before_needle = false)
  • $ haystack :検索する元の文字列。

  • $針:検索するキャラクター(文字列の場合、最初のキャラクターのみが撮影されます)。

  • $ before_needle (オプション):針の前にすべてを返すかどうか(デフォルトはfalse)。

2。パフォーマンス分析

PHPのコア関数の中で、 StrChr()は軽量の文字列処理機能であり、そのパフォーマンスは通常優れていますが、いくつかの使用制限があります。

1。時間の複雑さ

StrChr()のコアメカニズムは、文字列を左から右にスキャンして、最初の一致する文字を見つけることです。これは、 o(n)の時間の複雑さで、nは文字列の長さです。そのパフォーマンスは、ほとんどの短い文字列または中程度の長さの弦で許容されます。

2。substr() + strpos()と比較してください

多くのシナリオでは、 Strpos()substr()を使用して同様の効果を達成できます。例えば:

 $url = "https://www.gitbox.net/page";
$fragment = substr($url, strpos($url, '/page'));

相当:

 $fragment = strchr($url, '/p');

パフォーマンスの観点から:

  • Strchr()はより簡潔ですが、文字レベルからのみ動作できます。

  • substr() + strpos()はより柔軟で、弦のサブストリングを処理できますが、少し複雑です。

3。パフォーマンステストの比較(回路図)

以下は、同じ文字列の文字を見つけるのに100,000回かかる簡単な比較テストです。

 $start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    strchr("https://www.gitbox.net/example", '/e');
}
$end = microtime(true);
echo "strchr 時間がかかる: " . ($end - $start) . " 2番";

実際の測定では、小型および中型の文字列では、 StrChr()のパフォーマンスが組み合わせ方法よりも優れているが、違いは大きくないことを示しています。読みやすさとシーンの適応性は、実際の選択で考慮する必要があります。

3。適用可能なシナリオ分析

1. URL固有のパスを抽出します

完全なURLからパス情報を抽出すると、 StrChr()は最初の/開始パスパーツをすばやく抽出できます。

 $url = "https://www.gitbox.net/api/data";
$path = strchr($url, '/a'); // 出力: /api/data

2.メールアドレスのドメイン名を決定します

strchr()を使用して、メールのドメイン名部分をすばやく取得できます。

 $email = "[email protected]";
$domain = strchr($email, '@'); // 出力: @gitbox.net

@を削除する必要がある場合は、 substr()を使用できます。

 $domain = substr(strchr($email, '@'), 1); // 出力: gitbox.net

3。ブールコンテキストと組み合わせて、文字が存在するかどうかを判断する

strchr()の返品値がブールのコンテキストで真の値である場合、それはキャラクターが存在することを意味します。

 if (strchr("gitbox.net/docs", '/d')) {
    echo "存在の道 /d";
}

4.抽出サブストリングプレフィックス(before_needleパラメーターを使用)

PHP 5.3の後、 before_needleパラメーターがサポートされています。

 $str = "gitbox.net/contact";
$prefix = strchr($str, '/', true); // 出力: gitbox.net

4。提案と予防策を使用します

  • パフォーマンスの考慮事項:大きな文字列または高周波呼び出しの場合、 Strchr()が本当に必要かどうか、またはStrpos()を使用して位置をより正確に制御するかどうかを検討します。

  • 読みやすさstrchr()は、 1つの文字のみが必要な単純なシナリオでは非常に適したクリアの意図を表します。

  • マルチキャラクタールックアップ制限:単一の文字ルックアップにのみサブストリングを見つけるのに適していません(パラメーターは文字列をサポートしていますが、実際には最初の文字とのみ一致します)。