strchr()は、phpの文字列関数です。その機能は、文字列でキャラクターが初めて表示される場所を見つけ、そのキャラクターの最初から文字列の終わりまですべてを返すことです。そのエイリアスはStrStr()であり、両方とも関数がほぼ同じです。
関数プロトタイプ:
string strchr(string $haystack, mixed $needle, bool $before_needle = false)
$ haystack :検索する元の文字列。
$針:検索するキャラクター(文字列の場合、最初のキャラクターのみが撮影されます)。
$ before_needle (オプション):針の前にすべてを返すかどうか(デフォルトはfalse)。
PHPのコア関数の中で、 StrChr()は軽量の文字列処理機能であり、そのパフォーマンスは通常優れていますが、いくつかの使用制限があります。
StrChr()のコアメカニズムは、文字列を左から右にスキャンして、最初の一致する文字を見つけることです。これは、 o(n)の時間の複雑さで、nは文字列の長さです。そのパフォーマンスは、ほとんどの短い文字列または中程度の長さの弦で許容されます。
多くのシナリオでは、 Strpos()でsubstr()を使用して同様の効果を達成できます。例えば:
$url = "https://www.gitbox.net/page";
$fragment = substr($url, strpos($url, '/page'));
相当:
$fragment = strchr($url, '/p');
パフォーマンスの観点から:
Strchr()はより簡潔ですが、文字レベルからのみ動作できます。
substr() + strpos()はより柔軟で、弦のサブストリングを処理できますが、少し複雑です。
以下は、同じ文字列の文字を見つけるのに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()のパフォーマンスが組み合わせ方法よりも優れているが、違いは大きくないことを示しています。読みやすさとシーンの適応性は、実際の選択で考慮する必要があります。
完全なURLからパス情報を抽出すると、 StrChr()は最初の/開始パスパーツをすばやく抽出できます。
$url = "https://www.gitbox.net/api/data";
$path = strchr($url, '/a'); // 出力: /api/data
strchr()を使用して、メールのドメイン名部分をすばやく取得できます。
$email = "[email protected]";
$domain = strchr($email, '@'); // 出力: @gitbox.net
@を削除する必要がある場合は、 substr()を使用できます。
$domain = substr(strchr($email, '@'), 1); // 出力: gitbox.net
strchr()の返品値がブールのコンテキストで真の値である場合、それはキャラクターが存在することを意味します。
if (strchr("gitbox.net/docs", '/d')) {
echo "存在の道 /d";
}
PHP 5.3の後、 before_needleパラメーターがサポートされています。
$str = "gitbox.net/contact";
$prefix = strchr($str, '/', true); // 出力: gitbox.net
パフォーマンスの考慮事項:大きな文字列または高周波呼び出しの場合、 Strchr()が本当に必要かどうか、またはStrpos()を使用して位置をより正確に制御するかどうかを検討します。
読みやすさ: strchr()は、 1つの文字のみが必要な単純なシナリオでは非常に適したクリアの意図を表します。
マルチキャラクタールックアップ制限:単一の文字ルックアップにのみサブストリングを見つけるのに適していません(針パラメーターは文字列をサポートしていますが、実際には最初の文字とのみ一致します)。