【PHP8.x】strchr関数の使い方

strchr関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

strchr関数は、ある文字列の中から、指定された別の文字列(または一文字)が最初に現れる位置を探し、その位置から元の文字列の最後までを抜き出して返す関数です。この関数は、主に特定の区切り文字やキーワード以降の情報を取得したい場合などに利用されます。

具体的な使い方としては、まず第一引数に検索の対象となる元の文字列を渡します。次に第二引数には、検索したい文字列や文字を指定します。たとえば、「Hello World」という文字列から「World」を探す場合、「World」が見つかった時点から残りの部分である「World」が返されます。もし「o」を探す場合、最初に見つかる「o」以降の「o World」が返されます。

また、第三引数にtrueを指定すると、検索文字列が見つかった位置より前の部分を返すように動作を変更できます。検索文字列が見つからない場合は、falseを返します。この関数は大文字・小文字を区別して検索を行います。大文字・小文字を区別せずに検索を行いたい場合は、stristr関数を利用してください。なお、strchr関数はstrstr関数のエイリアス(別名)であり、両者は全く同じ機能を提供します。

構文(syntax)

1<?php
2$full_string = "apple,banana,orange";
3$part_string = strchr($full_string, ',');
4// $part_string は ",banana,orange" となる
5echo $part_string;
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 strchr関数で文字列を検索する

1<?php
2
3/**
4 * このスクリプトは、PHPのstrchr関数を使って、文字列の中から特定の文字または部分文字列を検索し、
5 * その位置から文字列の一部を抽出する方法を示します。
6 * strchr関数は、stristr関数のエイリアスであり、文字の大小を区別します。
7 */
8
9// 検索対象の文字列
10$text = "Hello, world! This is a PHP example.";
11
12// Case 1: 'world' を検索し、その位置から文字列の最後までを返す (デフォルトの動作)
13// strchr('検索対象文字列', '検索文字列')
14$result1 = strchr($text, "world");
15echo "Case 1: 'world' を検索し、その位置から文字列の最後まで:\n";
16var_dump($result1); // string(26) "world! This is a PHP example."
17echo "\n";
18
19// Case 2: 'is' を検索し、その位置から文字列の最後までを返す (大文字小文字を区別)
20// 'is' は2回登場するが、最初の 'is' で停止する
21$result2 = strchr($text, "is");
22echo "Case 2: 'is' を検索し、その位置から文字列の最後まで:\n";
23var_dump($result2); // string(19) "is a PHP example."
24echo "\n";
25
26// Case 3: 'PHP' を検索し、その文字の**前まで**を返す
27// strchr('検索対象文字列', '検索文字列', true)
28$result3 = strchr($text, "PHP", true);
29echo "Case 3: 'PHP' を検索し、その文字の**前まで**:\n";
30var_dump($result3); // string(23) "Hello, world! This is a "
31echo "\n";
32
33// Case 4: 検索文字列が見つからない場合
34// 戻り値は false になる
35$result4 = strchr($text, "unknown");
36echo "Case 4: 'unknown' を検索し、見つからない場合:\n";
37var_dump($result4); // bool(false)
38echo "\n";
39
40// Case 5: 検索文字列が大文字小文字を区別するため見つからない場合
41// 'php' は見つからない (元の文字列には 'PHP' があるが、'php' はない)
42$result5 = strchr($text, "php");
43echo "Case 5: 大文字小文字を区別し、'php' が見つからない場合:\n";
44var_dump($result5); // bool(false)
45echo "\n";
46
47?>

PHPのstrchr関数は、指定された文字列($haystack)の中から特定の文字または部分文字列($needle)を検索し、その位置から文字列の一部を抽出する際に使用します。この関数は、大文字と小文字を区別して検索を行う点が特徴です。

第一引数には検索対象となる元の文字列、第二引数には検索したい文字や部分文字列を指定します。第三引数$before_needleはオプションで、trueを指定すると、$needleが見つかった位置の前までの文字列を返します。この引数を省略するかfalseを指定した場合、$needleが見つかった位置から文字列の最後までを返します。

strchr関数は、検索文字列が見つかった場合は指定された条件に応じた文字列を返しますが、見つからなかった場合はfalseを返します。

サンプルコードでは、まず"Hello, world! This is a PHP example."という文字列を用意しています。Case 1と2では$before_needleを指定しないため、"world""is"が見つかった位置から後ろの文字列が抽出されています。Case 3では$before_needletrueを指定することで、"PHP"が見つかった位置の前までの文字列が返されます。Case 4と5は、検索文字列が元の文字列中に存在しない場合の例です。特にCase 5では、"php"という小文字の検索文字列に対し、元の文字列には"PHP"という大文字の文字列が存在しますが、strchr関数が大文字小文字を区別するため見つからず、falseが返されることが確認できます。

PHPのstrchr関数は、文字列の検索において大文字小文字を厳密に区別します。そのため、検索する文字や部分文字列の指定には十分な注意が必要です。大文字小文字を区別せずに検索したい場合は、stristr関数などの利用をご検討ください。

また、検索文字列が見つからなかった場合、この関数はfalseを返します。この戻り値を確認せずに結果を使用すると、プログラムが予期せぬ動作をする可能性があります。必ずif ($result !== false)のように厳密な比較で戻り値をチェックし、安全に処理を進めるようにしてください。

第三引数$before_needletrueを指定すると、検索文字列の「前まで」の文字列を取得できます。この引数を省略またはfalseにした場合は、検索文字列を含む「その位置から最後まで」の文字列が返される点も覚えておくと良いでしょう。

関連コンテンツ

【PHP8.x】strchr関数の使い方 | いっしー@Webエンジニア