【PHP8.x】stristr関数の使い方
stristr関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
stristr関数は、与えられた文字列の中から、指定した部分文字列を大文字と小文字を区別せずに検索し、最初に見つかった部分文字列から元の文字列の最後までを返す関数です。この関数は、主に特定のキーワードを含む部分を抽出したい場合に使用されます。
第一引数には検索対象となる元の文字列を、第二引数には検索したい部分文字列を指定します。もし部分文字列が見つかった場合、stristr関数はその部分文字列が見つかった位置から元の文字列の終わりまでの部分を返します。例えば、「Hello World」という文字列から「world」を検索すると、「World」が見つかり、「World」から最後までである「World」が返されます。大文字小文字を区別しないため、「world」でも「World」でも一致し、柔軟な検索が可能です。
第三引数before_needleはオプションで、trueを指定すると、見つかった部分文字列より前の部分を返します。この引数をtrueに設定し、「Hello World」から「World」を検索した場合、「Hello 」が返されます。
検索する部分文字列が見つからなかった場合は、falseを返します。stristr関数は、文字列の中から特定の情報を大文字小文字を気にせずに抽出したい場合に非常に役立ちます。似た機能を持つ関数にstrstrがありますが、こちらは大文字小文字を厳密に区別する点でstristr関数と異なります。
構文(syntax)
1<?php 2$mainString = "The quick brown fox jumps over the lazy dog."; 3$searchNeedle = "FOX"; // 大文字小文字を区別せずに検索される 4$result = stristr($mainString, $searchNeedle); 5echo $result; 6?>
引数(parameters)
string $haystack, string $needle, bool $before_needle = false
- string $haystack: 検索対象となる文字列
- string $needle: 検索する文字列
- bool $before_needle = false: trueの場合、$needle より前の部分を返す
戻り値(return)
string|false
指定された部分文字列が元の文字列内に存在する場合、その部分文字列が出現する位置から文字列の最後までを返します。見つからなかった場合は false を返します。
サンプルコード
PHP stristr 関数で大文字小文字を区別せずに文字列を検索する
1<?php 2 3/** 4 * stristr 関数の使用例を示します。 5 * stristr は、大文字小文字を区別せずに文字列を検索し、 6 * 見つかった場合はその部分から最後まで(またはそれより前)の文字列を返します。 7 */ 8 9// 検索対象となる長い文字列 10$haystack = "Hello PHP Developers! We are learning string functions in PHP 8."; 11 12// 1. 基本的な使い方: 検索文字列が見つかった部分から最後までを返す(大文字小文字を区別しない) 13// "php" は "PHP" とマッチします。 14$needle1 = "php"; 15$result1 = stristr($haystack, $needle1); 16if ($result1 !== false) { 17 echo "例1: '" . $needle1 . "' が見つかりました。結果: '" . $result1 . "'\n"; 18} else { 19 echo "例1: '" . $needle1 . "' は見つかりませんでした。\n"; 20} 21// 期待される出力: 'php' が見つかりました。結果: 'PHP Developers! We are learning string functions in PHP 8.' 22 23// 2. 検索文字列が見つからなかった場合 24$needle2 = "python"; 25$result2 = stristr($haystack, $needle2); 26if ($result2 !== false) { 27 echo "例2: '" . $needle2 . "' が見つかりました。結果: '" . $result2 . "'\n"; 28} else { 29 echo "例2: '" . $needle2 . "' は見つかりませんでした。\n"; 30} 31// 期待される出力: 'python' は見つかりませんでした。 32 33// 3. 第三引数 $before_needle を true に設定: 検索文字列が見つかるまでの部分を返す 34// "Developers" が見つかるまでの部分が返されます。 35$needle3 = "Developers"; 36$result3 = stristr($haystack, $needle3, true); 37if ($result3 !== false) { 38 echo "例3: '" . $needle3 . "' の前部分。結果: '" . $result3 . "'\n"; 39} else { 40 echo "例3: '" . $needle3 . "' は見つかりませんでした。\n"; 41} 42// 期待される出力: 'Developers' の前部分。結果: 'Hello PHP ' 43 44// 4. 第三引数 $before_needle を false に設定 (デフォルト): 検索文字列が見つかった部分から最後までを返す 45// これは例1と同じ挙動を示しますが、明示的に false を指定しています。 46$needle4 = "functions"; 47$result4 = stristr($haystack, $needle4, false); 48if ($result4 !== false) { 49 echo "例4: '" . $needle4 . "' が見つかりました。結果: '" . $result4 . "'\n"; 50} else { 51 echo "例4: '" . $needle4 . "' は見つかりませんでした。\n"; 52} 53// 期待される出力: 'functions' が見つかりました。結果: 'functions in PHP 8.' 54 55?>
PHPのstristr関数は、ある文字列($haystack)の中から、指定した別の文字列($needle)を大文字小文字を区別せずに検索する際に利用されます。この関数は、$needleが見つかった場合、その文字列が見つかった位置から$haystackの最後までを含む部分文字列を返します。もし$needleが見つからなかった場合は、falseを返します。
第三引数$before_needleにtrueを設定すると、$needleが見つかった際に、その$needleが見つかるまでの$haystackの前部分を返します。この引数はデフォルトでfalseが設定されており、その場合は$needleが見つかった位置から最後までを返します。
サンプルコードでは、まず「php」を大文字小文字を無視して検索し、「PHP Developers!...」という部分文字列を取得しています。次に「python」のような見つからない文字列を検索すると、falseが返されるため、その旨が示されます。さらに、「Developers」を検索する際に$before_needleをtrueに設定することで、「Hello PHP 」という前部分の文字列が取得できることを示しています。最後に、$before_needleを明示的にfalseに設定した場合の挙動も確認でき、「functions in PHP 8.」が返される様子が理解できます。
stristr関数は、文字列の大文字小文字を区別せずに検索する点が特徴です。目的の文字列が見つからない場合、戻り値はブール値のfalseとなります。このfalseは空の文字列とは異なるため、結果をチェックする際は!== falseのように厳密な等価演算子を使うことで、意図しないバグを防ぐことができます。第三引数をtrueに設定すると、検索文字列が見つかる「前」の部分が返され、デフォルトのfalseでは見つかった部分から「後」の文字列が返されます。この違いを理解して使い分けましょう。PHP 8の環境では、戻り値の型にstring|falseと明記されているため、型を意識した安全なコーディングを心がけることが重要です。
PHP stristr関数で大文字小文字を区別せず検索する
1<?php 2 3/** 4 * stristr関数の使用例 5 * stristrは、大文字小文字を区別せずに文字列の中から指定した部分文字列を探し、 6 * その部分文字列が見つかった位置から残りの文字列、またはそれ以前の文字列を返します。 7 * 見つからなかった場合はfalseを返します。 8 */ 9 10// 検索対象の文字列 11$text = "Hello World, PHP is awesome!"; 12$search_text_found = "php"; // 大文字小文字を区別しないため "PHP" と一致する 13$search_text_before = "World"; 14$search_text_not_found = "Java"; 15 16echo "元の文字列: \"{$text}\"\n\n"; 17 18// 例1: 大文字小文字を区別せず、最初に見つかった部分文字列から最後までを取得 (デフォルト動作) 19// "PHP" が "php" と一致し、その位置から後ろの文字列が返されます。 20$result1 = stristr($text, $search_text_found); 21if ($result1 !== false) { 22 echo "例1: '{$search_text_found}' を検索 (デフォルト動作) -> 結果: \"{$result1}\"\n"; 23} else { 24 echo "例1: '{$search_text_found}' が見つかりませんでした。\n"; 25} 26 27// 例2: 大文字小文字を区別せず、最初に見つかった部分文字列より前の部分を取得 28// "World" が見つかった場合、その前の部分 "Hello " が返されます。 29$result2 = stristr($text, $search_text_before, true); 30if ($result2 !== false) { 31 echo "例2: '{$search_text_before}' を検索 (前の部分) -> 結果: \"{$result2}\"\n"; 32} else { 33 echo "例2: '{$search_text_before}' が見つかりませんでした。\n"; 34} 35 36// 例3: 指定した部分文字列が見つからない場合 37// "Java" は元の文字列に含まれないため、falseが返されます。 38$result3 = stristr($text, $search_text_not_found); 39if ($result3 !== false) { 40 echo "例3: '{$search_text_not_found}' を検索 -> 結果: \"{$result3}\"\n"; 41} else { 42 echo "例3: '{$search_text_not_found}' が見つかりませんでした。\n"; 43} 44 45?>
stristr関数は、PHPにおいて文字列の中から特定の部分文字列を、大文字小文字を区別せずに検索する際に使用されます。この関数は、検索対象の文字列を$haystack、探したい部分文字列を$needleとして指定します。
基本的な動作として、$needleが見つかった場合、その部分文字列が見つかった位置から$haystackの最後までを新しい文字列として返します。もし、3つ目の引数$before_needleにtrueを指定すると、$needleが見つかった位置より前の部分の文字列を返します。$needleが見つからなかった場合は、falseを返します。
サンプルコードの例1では、"Hello World, PHP is awesome!"という文字列から"php"を検索し、大文字小文字を無視して"PHP"と一致するため、その位置から後ろの文字列"PHP is awesome!"が返されます。例2では、"World"より前の部分を返すように指定しているため、"Hello "が結果として得られます。例3のように、指定した"Java"が見つからない場合はfalseが返され、「見つかりませんでした」と表示されます。このように、stristr関数は文字列から必要な情報を柔軟に抽出するのに役立つ関数です。
stristr関数は、大文字小文字を区別せずに文字列を検索します。特に注意すべき点は、検索対象が見つからなかった場合にfalseが戻り値となることです。戻り値が空文字列""の場合とfalseの場合を区別するため、必ずif ($result !== false)のように厳密な比較で確認するようにしてください。これにより、予期せぬエラーを防ぎ、コードを安全に利用できます。また、第三引数にtrueを指定すると、見つかった部分文字列より前の部分が返されます。デフォルトは、見つかった部分文字列を含め、それ以降の部分を返す動作です。この関数の「i」は"insensitive"を意味し、大文字小文字を区別しないという特性を覚えておきましょう。