PHP String Functions

PHPにおける効率的な部分文字列の先頭一致チェック

Spread the love

PHPは、文字列が特定のサブ文字列で始まるかどうかを判断するためのいくつかの効率的な方法を提供します。この記事では、substr()strpos()strncmp()関数の3つの一般的なアプローチについて説明します。それぞれの方法には長所と短所があり、さまざまなシナリオに適しています。

目次

substr()を使用した先頭サブ文字列の確認

substr()関数は、文字列の一部を抽出します。これを使用して、文字列の先頭がターゲットのサブ文字列と一致するかどうかを確認できます。このアプローチはシンプルで理解しやすいです。


<?php

function startsWithSubstr(string $haystack, string $needle): bool {
  return substr($haystack, 0, strlen($needle)) === $needle;
}

$string = "This is a test string.";
$substring = "This";

if (startsWithSubstr($string, $substring)) {
  echo "'$string' starts with '$substring'n";
} else {
  echo "'$string' does not start with '$substring'n";
}

$string2 = "Another test string.";
$substring2 = "Test";

if (startsWithSubstr($string2, $substring2)) {
  echo "'$string2' starts with '$substring2'n";
} else {
  echo "'$string2' does not start with '$substring2'n";
}

?>

このコードは、インデックス0から開始して$needleの長さを持つ$haystackの部分を抽出します。次に、厳密な比較(===)を実行して、型と値の両方が一致することを確認します。この方法は、短いサブ文字列に対して効率的です。

strpos()を使用した先頭サブ文字列の確認

strpos()関数は、サブ文字列の最初の出現位置を見つけます。サブ文字列が先頭にある場合、その位置は0になります。


<?php

function startsWithPos(string $haystack, string $needle): bool {
  //strpos returns false if needle is not found, so we use !== instead of !=
  return strpos($haystack, $needle) === 0;
}

$string = "This is a test string.";
$substring = "This";

if (startsWithPos($string, $substring)) {
  echo "'$string' starts with '$substring'n";
} else {
  echo "'$string' does not start with '$substring'n";
}

$string2 = "Another test string.";
$substring2 = "Test";

if (startsWithPos($string2, $substring2)) {
  echo "'$string2' starts with '$substring2'n";
} else {
  echo "'$string2' does not start with '$substring2'n";
}

?>

これは簡潔で頻繁に使用される方法です。strpos()は、needleが見つからない場合にfalseを返すため、厳密な比較(=== 0)が重要です。

strncmp()を使用した先頭サブ文字列の確認

strncmp()関数は、2つの文字列の部分を比較します。大文字と小文字を区別する比較を行う場合、または特定の数の文字のみを確認する場合に特に役立ちます。


<?php

function startsWithStrncmp(string $haystack, string $needle): bool {
  return strncmp($haystack, $needle, strlen($needle)) === 0;
}

$string = "This is a test string.";
$substring = "This";

if (startsWithStrncmp($string, $substring)) {
  echo "'$string' starts with '$substring'n";
} else {
  echo "'$string' does not start with '$substring'n";
}

$string2 = "Another test string.";
$substring2 = "Test";

if (startsWithStrncmp($string2, $substring2)) {
  echo "'$string2' starts with '$substring2'n";
} else {
  echo "'$string2' does not start with '$substring2'n";
}

?>

strncmp()は、$haystackの最初のstrlen($needle)文字を$needleと比較します。戻り値が0の場合、それらは同一です。この関数は効率的で、より多くの制御を提供します。

適切な方法の選択

短いサブ文字列の場合、シンプルさと可読性のためにsubstr()が良い選択です。strpos()は、ほとんどの場合に簡潔で効率的なソリューションを提供します。strncmp()は大文字と小文字を区別する比較を行う場合、または比較を特定の文字数に制限する場合に、より柔軟性を提供します。非常に大きな文字列の場合、わずかなパフォーマンス上の利点がある可能性がありますが、一般的なユースケースのほとんどでは、strpos()で十分です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です