Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】mb_substr_count()関数の使い方

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

作成日: 更新日:

基本的な使い方

mb_substr_count関数は、指定された文字列($haystack)の中に、特定の短い文字列($needle)が何回出現するかを数える関数です。この関数は、日本語や中国語のような、1文字が複数のバイトで表現されるマルチバイト文字列を正確に扱えるように設計されています。そのため、通常のsubstr_count関数では文字の区切りを正しく認識できない場合でも、mb_substr_count関数は文字エンコーディングを考慮して正確な出現回数を返します。

この関数は、検索対象の文字列$haystackと、検索したい部分文字列$needleを必須の引数として受け取ります。さらに、オプションとして$encoding引数に文字エンコーディング名を指定できます。この$encodingを指定しない場合、PHPの内部エンコーディング設定が自動的に使用されます。

mb_substr_count関数は、$needle$haystack内で重複しない形で出現する総数を整数値で返します。たとえば、Webサイトのコンテンツから特定のキーワードの出現頻度を調べたり、ユーザーが入力したテキストに特定の句読点がどれだけ使われているかを確認したりする際に非常に有用です。マルチバイト文字を扱うWebアプリケーションやデータ処理において、文字列の解析や検証を行う上で欠かせない基本的なツールの一つとして利用されます。

構文(syntax)

1<?php
2
3$text = "こんにちは世界、こんにちはPHP";
4$search = "こんにちは";
5$count = mb_substr_count($text, $search);
6
7echo $count;
8
9?>

引数(parameters)

string $haystack, string $needle, ?string $encoding = null

  • string $haystack: 検索対象となる文字列
  • string $needle: 検索する文字列
  • ?string $encoding = null: 文字エンコーディングを指定する文字列。省略した場合、内部文字エンコーディングが使用されます。

戻り値(return)

int

指定された文字列の中に、検索対象の文字列が何回出現するかを整数で返します。

サンプルコード

PHP mb_substr_countで部分文字列を数える

1<?php
2
3/**
4 * mb_substr_count関数の基本的な使用例。
5 * この関数は、マルチバイト文字列内で特定の部分文字列が何回出現するかを数えます。
6 * PHP 8 環境を想定しています。
7 */
8
9// 検索対象となる元の文字列
10$haystack = "PHPは素晴らしいプログラミング言語です。PHPはWeb開発に最適です。PHPを学びましょう。";
11
12// 検索したい部分文字列
13$needle = "PHP";
14
15// mb_substr_count関数を使用して、部分文字列の出現回数をカウントします。
16// 第3引数にはエンコーディング(ここでは'UTF-8')を指定することが推奨されます。
17// これにより、マルチバイト文字を正確に処理できます。
18$count = mb_substr_count($haystack, $needle, 'UTF-8');
19
20echo "元の文字列: " . $haystack . PHP_EOL;
21echo "検索キーワード: '" . $needle . "'" . PHP_EOL;
22echo "キーワードの出現回数: " . $count . "回" . PHP_EOL . PHP_EOL;
23
24// 日本語を含む文字列での別の例
25$japaneseHaystack = "こんにちは世界、PHPは楽しい。また、こんにちは。";
26$japaneseNeedle = "こんにちは";
27
28$japaneseCount = mb_substr_count($japaneseHaystack, $japaneseNeedle, 'UTF-8');
29
30echo "元の日本語文字列: " . $japaneseHaystack . PHP_EOL;
31echo "検索日本語キーワード: '" . $japaneseNeedle . "'" . PHP_EOL;
32echo "日本語キーワードの出現回数: " . $japaneseCount . "回" . PHP_EOL;
33

PHPのmb_substr_count関数は、指定された文字列($haystack)の中から、特定の部分文字列($needle)が何回出現するかを数えるための関数です。特に「mb_」という接頭辞が示す通り、日本語のようなマルチバイト文字を含む文字列を正確に扱う際に非常に重要となります。

この関数は3つの引数を取ります。最初の引数$haystackは、検索対象となる元の文字列を指定します。次に$needleは、検索したい部分文字列、つまりキーワードを指定します。最後の引数$encodingはオプションですが、'UTF-8'のように文字列のエンコーディングを指定することで、マルチバイト文字の判定をより正確に行うことが強く推奨されます。関数の戻り値は、$needle$haystack内で見つかった回数を表す整数(int)です。

サンプルコードでは、まず英語と日本語の両方を含む文字列に対して「PHP」や「こんにちは」といったキーワードが何回出現するかを数えています。mb_substr_count関数に元の文字列とキーワード、そしてエンコーディングとして'UTF-8'を渡すことで、期待通りの出現回数が正確に算出されていることが確認できます。例えば、「PHPは素晴らしいプログラミング言語です。PHPはWeb開発に最適です。PHPを学びましょう。」という文字列から「PHP」の出現回数を数えると、3回という結果が得られます。この関数は、ログ解析やテキスト処理など、特定のキーワードの出現頻度を調べる多くの場面で役立ちます。

mb_substr_count関数は、日本語のようなマルチバイト文字を正確に扱うために非常に重要です。通常のsubstr_count関数では、文字の境界を正しく認識できず、文字化けや期待と異なるカウント結果になる可能性があります。

特に、第3引数のencodingには、必ず使用する文字エンコーディング(例: 'UTF-8')を明示的に指定してください。これを省略すると、PHPの内部エンコーディング設定に依存し、環境によって結果が変わるなど予期せぬ問題が発生する原因となります。システムやデータベースで使用しているエンコーディングと一致させることが、安定した動作には不可欠です。

また、この関数は検索キーワードの大文字・小文字を区別してカウントします。もし大文字・小文字を区別せずにカウントしたい場合は、事前にmb_strtolowerなどの関数を用いて、検索対象文字列とキーワードのケースを統一してから使用してください。

PHP mb_substr_countで文字列中のPHPの数える

1<?php
2
3/**
4 * PHPのmb_substr_count関数を使用して、文字列中の特定のキーワードの出現回数を数える例。
5 *
6 * mb_substr_countは、マルチバイト文字列(日本語などの文字)を正しく扱い、
7 * 指定された部分文字列が何回出現するかをカウントします。
8 * システムエンジニアを目指す初心者の方にも分かりやすいように、具体的な日本語の例で示します。
9 */
10function countKeywordOccurrences(): void
11{
12    // 検索対象となる日本語を含む文字列を定義します。
13    $fullText = "PHPは人気のプログラミング言語です。PHPでWeb開発を学ぶことができます。PHPは多くの可能性を秘めています。";
14
15    // 数えたいキーワード(部分文字列)を定義します。
16    $keyword = "PHP";
17
18    // mb_substr_count関数を使って、キーワードの出現回数を数えます。
19    // 第3引数にはエンコーディングを指定します。通常、日本語を扱う場合は'UTF-8'を指定します。
20    $count = mb_substr_count($fullText, $keyword, 'UTF-8');
21
22    // 結果を出力して確認します。
23    echo "--- キーワード出現回数カウント ---" . PHP_EOL;
24    echo "対象文字列: " . $fullText . PHP_EOL;
25    echo "検索キーワード: '" . $keyword . "'" . PHP_EOL;
26    echo "出現回数: " . $count . "回" . PHP_EOL;
27
28    echo PHP_EOL; // 空行で区切り
29
30    // 別の例:日本語のキーワードを検索します。
31    $japaneseText = "これは日本語の文章です。日本語のキーワードを数えてみましょう。";
32    $japaneseKeyword = "日本語";
33    $japaneseCount = mb_substr_count($japaneseText, $japaneseKeyword, 'UTF-8');
34
35    echo "--- 日本語キーワード出現回数カウント ---" . PHP_EOL;
36    echo "対象文字列: " . $japaneseText . PHP_EOL;
37    echo "検索キーワード: '" . $japaneseKeyword . "'" . PHP_EOL;
38    echo "出現回数: " . $japaneseCount . "回" . PHP_EOL;
39}
40
41// 関数を実行します。
42countKeywordOccurrences();

PHPのmb_substr_count関数は、文字列の中に特定のキーワード(部分文字列)が何回出現するかを正確に数えるための関数です。特に日本語のようなマルチバイト文字を含む文字列を扱う際に、文字化けや誤カウントを防ぎ、正しく処理できる点が大きな特徴です。

この関数は、3つの引数を受け取ります。最初の$haystackには検索対象となる元の文字列を、次の$needleには数えたいキーワードを指定します。最後の$encodingはオプションですが、日本語を扱う場合は'UTF-8'のように使用している文字エンコーディングを明示的に指定することで、常に正しい結果が得られます。処理が完了すると、キーワードの出現回数を整数(int型)で返します。

サンプルコードでは、まず「PHPは人気のプログラミング言語です。」のような文章から「PHP」というキーワードの出現回数を数え、3回と表示しています。さらに、日本語の文章「これは日本語の文章です。」から「日本語」というキーワードを数える例も示しており、こちらも2回と正確にカウントされています。このようにmb_substr_countは、英数字だけでなく日本語のキーワードも問題なく処理します。システム開発でテキストデータから情報を抽出したり、特定のキーワードの頻度を調べたりする際に非常に有用な関数です。

mb_substr_count関数は、日本語などのマルチバイト文字を含む文字列において、特定のキーワードが何回出現するかを正確に数える際に非常に役立ちます。サンプルコードのように、第3引数で検索対象の文字列のエンコーディング(文字コード)を必ず指定してください。通常は'UTF-8'を使用しますが、実際のシステムで扱う文字列のエンコーディングと一致している必要があります。この指定を誤ると、キーワードを正しく認識できず、意図しない出現回数が返される可能性があります。エンコーディングを省略した場合はPHPの設定値が使われますが、安全のためにも明示的な指定を強く推奨いたします。この関数は、指定されたキーワードの出現回数を整数値で返しますので、その結果をもとに安全に次の処理を進めることができます。

関連コンテンツ

関連プログラミング言語