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

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

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

作成日: 更新日:

基本的な使い方

str_word_count関数は、指定された文字列に含まれる単語の数を数えたり、単語そのものの情報を取り出したりするPHPの関数です。この関数は、文字列内のスペースや句読点などで区切られた部分を単語と認識し、その合計数を整数値で返します。

第2引数としてフォーマットを指定することで、単語の取得方法を変更できます。フォーマットを「1」に設定すると、文字列内の各単語を要素とする配列が返されます。さらに、「2」に設定すると、単語の開始位置をキー、単語自体を値とする連想配列として単語の情報を取得することが可能です。

また、第3引数では、デフォルトでは単語の一部と見なされないが、単語として扱いたい追加の文字(例えば、ハイフンやアポストロフィーなど)を指定できます。これにより、より柔軟な単語のカウントや抽出が可能になります。

この関数は、テキスト処理やデータ分析において、文字列から単語レベルの情報を効率的に取得したい場合に非常に役立ちます。単語の数を数える場合は整数値、単語の情報を配列で取得する場合は配列が戻り値として返されます。PHPでの文字列操作を学ぶ上で、この関数は非常に基本的ながら強力なツールの一つです。

構文(syntax)

1str_word_count(
2    string $string,
3    int $format = 0,
4    ?string $characters = null
5): array|int

引数(parameters)

string $string, int $format = 0, ?string $characters = null

  • string $string: 単語数をカウントしたい対象の文字列
  • int $format = 0: 返却する形式を指定する整数。
    • 0: 単語の数を整数で返します (デフォルト)。
    • 1: 文字列の配列を返します。
    • 2: キーが単語、値がその単語の出現位置を示す連想配列を返します。
  • ?string $characters = null: 単語を構成するとみなす文字を指定する文字列。指定しない場合は、ASCIIのアルファベット、数字、およびアポストロフィ (') が単語を構成するとみなされます。

戻り値(return)

array|int

この関数は、文字列中の単語数をカウントしたり、単語の配列を返します。指定されたモードによって、整数または文字列の配列が返されます。

サンプルコード

PHP: str_word_countで特殊文字を扱う

1<?php
2
3/**
4 * str_word_count() 関数の使用例を示します。
5 * 特に、特殊文字を単語の一部として扱う方法に焦点を当てています。
6 *
7 * str_word_count() は、文字列内の単語を数えたり、単語を抽出したりするために使用されます。
8 * 第三引数 `$characters` を使うことで、デフォルトでは単語区切りとみなされる文字を
9 * 単語の一部として含めることができます。
10 */
11function demonstrateStrWordCountSpecialCharacters(): void
12{
13    // テスト用の文字列。ハイフンやアポストロフィを含む単語、バージョン番号などを含みます。
14    $text = "This is a well-known programming language, PHP-8.0. It's truly powerful!";
15
16    echo "--- 1. デフォルトの動作 (ハイフンやピリオドを単語区切りとみなす) ---\n";
17    // デフォルトでは、ハイフンやピリオドは単語の区切りとして扱われます。
18    // 例: "well-known" は "well" と "known" に分かれます。
19    // 例: "PHP-8.0" は "PHP", "8", "0" に分かれます。
20    // ただし、アポストロフィ ('') は単語内では区切りとみなされません (例: "It's" は一つの単語)。
21    $wordsDefault = str_word_count($text, 1);
22    echo "単語数: " . count($wordsDefault) . "\n";
23    echo "単語リスト: " . implode(', ', $wordsDefault) . "\n\n";
24
25    echo "--- 2. 特定の特殊文字 ('-', '.') を単語の一部とみなす場合 ---\n";
26    // 第三引数 `$characters` に '-' と '.' を追加することで、これらを単語の一部として扱います。
27    // これにより "well-known" や "PHP-8.0" が一つの単語として認識されるようになります。
28    $additionalChars = "-."; // ハイフンとピリオド
29    $wordsWithSpecialChars = str_word_count($text, 1, $additionalChars);
30    echo "単語数: " . count($wordsWithSpecialChars) . "\n";
31    echo "単語リスト: " . implode(', ', $wordsWithSpecialChars) . "\n\n";
32
33    echo "--- 3. 単語とその開始位置のリスト (format=2) ---\n";
34    // format=2 を使用すると、単語の開始位置をキー、単語自体を値とする関連配列を取得できます。
35    // ここでもハイフンとピリオドを単語の一部として扱った結果を表示します。
36    $wordsWithPositions = str_word_count($text, 2, $additionalChars);
37    echo "単語と位置のリスト (ハイフンとピリオドを単語の一部として扱う):\n";
38    foreach ($wordsWithPositions as $position => $word) {
39        echo "  [位置: {$position}] {$word}\n";
40    }
41}
42
43// 上記のデモンストレーション関数を実行します。
44demonstrateStrWordCountSpecialCharacters();
45
46?>

str_word_count 関数は、指定された文字列の中から単語を数えたり、単語をリストとして抽出したりするために使用されます。

この関数は、第一引数 $string で処理対象の文字列を受け取ります。第二引数 $format は戻り値の形式を指定し、デフォルトでは単語の総数を整数で返します。もし1を指定すると、文字列から抽出された単語の配列が返され、2を指定すると、単語の開始位置をキー、単語自体を値とする連想配列が返されます。第三引数 $characters はオプションで、デフォルトでは単語の区切りとみなされる特定の特殊文字(例えばハイフンなど)を、単語の一部として扱いたい場合にその文字群を指定します。戻り値は、$format の指定に応じて整数または配列となります。

このサンプルコードでは、まずデフォルト設定で str_word_count を実行し、ハイフンやピリオドが単語の区切りとして扱われる例(「well-known」が「well」と「known」に分かれるなど)を示しています。次に、第三引数 $characters にハイフンとピリオドを追加して再度実行することで、「well-known」や「PHP-8.0」といった表記が単一の単語として認識される様子を確認できます。さらに $format に2を指定する例では、単語のリストだけでなく、それぞれの単語が元の文字列のどの位置から始まるかという情報も同時に取得できることを示しており、文字列処理の柔軟性が高まります。このように str_word_count 関数は、文字列中の単語を詳細に分析したり抽出したりする際に非常に有用です。

str_word_count関数は、文字列内の単語を数えたり抽出したりする際に便利です。初心者が特に注意すべきは、第三引数$charactersの利用方法です。この引数に特定の記号(例:ハイフン、ピリオド)を指定すると、それらの記号が単語の区切りではなく、単語の一部として認識されるようになります。これにより、「well-known」や「PHP-8.0」のように記号を含む文字列を一つの単語として正しく扱えます。

また、第二引数$formatによって戻り値が単語数(整数)になったり、単語の配列になったりするため、取得した値の型に注意してコードを記述してください。この関数は主に半角英数字の単語カウントに適しており、日本語などのマルチバイト文字の単語分割には想定通りの結果が得られない場合があるため、その点も留意が必要です。

PHP str_word_count UTF-8文字の単語カウント

1<?php
2
3/**
4 * PHPのstr_word_count関数の基本的な使用方法と、UTF-8文字列での単語カウントの注意点、
5 * およびその代替方法を示します。
6 *
7 * str_word_count関数は、主にASCII文字列の単語カウントに適しており、
8 * UTF-8マルチバイト文字を正しく単語として認識することができません。
9 * UTF-8文字列を扱う場合は、正規表現(preg_match_all)などの代替手段を検討する必要があります。
10 */
11function demonstrateStrWordCountUtf8(): void
12{
13    // 1. ASCII文字列でのstr_word_countの使用例
14    // この場合、str_word_countは期待通りに動作します。
15    $asciiString = "Hello world, how are you doing today?";
16    echo "=== ASCII 文字列での単語カウント ===\n";
17    echo "文字列: '" . $asciiString . "'\n";
18    $wordCountAscii = str_word_count($asciiString);
19    echo "str_word_countでの単語数: " . $wordCountAscii . " (期待値: 7)\n\n";
20
21    // 2. UTF-8文字列でのstr_word_countの使用例と問題点
22    // str_word_countはUTF-8マルチバイト文字を正しく単語として扱いません。
23    // 日本語のようなマルチバイト言語の文字は単語として認識されず、結果が期待と異なります。
24    $utf8String = "こんにちは 世界、PHPは素晴らしい言語です!";
25    echo "=== UTF-8 (日本語) 文字列での単語カウント ===\n";
26    echo "文字列: '" . $utf8String . "'\n";
27    $wordCountUtf8 = str_word_count($utf8String);
28    echo "str_word_countでの単語数: " . $wordCountUtf8 . " (注: 正しくありません)\n";
29    echo "str_word_countはマルチバイト文字を正しく単語として認識しません。\n";
30    echo "(例えば、'こんにちは'や'世界'が単語としてカウントされていません。)\n\n";
31
32    // 3. UTF-8文字列を正しく単語カウントする代替方法 (正規表現)
33    // preg_match_all関数と'u' (Unicode) 修飾子を使用すると、UTF-8文字列の単語を正しく数えられます。
34    // `\p{L}` はUnicodeのあらゆる「文字」(Letter)カテゴリにマッチし、`+` で1つ以上の連続する文字を単語とします。
35    echo "=== UTF-8 (日本語) 文字列を正しく単語カウントする代替方法 ===\n";
36    if (preg_match_all('/\p{L}+/u', $utf8String, $matches)) {
37        $correctWordCountUtf8 = count($matches[0]);
38        echo "preg_match_allでの正しい単語数: " . $correctWordCountUtf8 . " (期待値: 6)\n";
39        echo "検出された単語: ";
40        print_r($matches[0]);
41    } else {
42        echo "単語が見つかりませんでした。\n";
43    }
44    echo "\n";
45}
46
47// 関数を実行して動作を確認します
48demonstrateStrWordCountUtf8();
49
50?>

PHP 8のstr_word_count関数は、文字列内の単語を数えるために使用されます。 第一引数$stringに数えたい文字列を指定し、オプションの第二引数$formatによって戻り値の形式を変えられます。$formatが0(デフォルト)の場合は単語数が整数で返され、それ以外の場合は単語情報を含む配列が戻り値となります。

この関数は、主に英数字などのASCII文字で構成される文字列に対しては正確に機能します。 しかし、日本語のようなUTF-8マルチバイト文字を含む文字列では問題が生じます。str_word_countはマルチバイト文字を単語として正しく認識できないため、「こんにちは」や「世界」といった日本語の単語は適切にカウントされず、期待する結果が得られないことに注意が必要です。

UTF-8文字列の単語を正確に数えたい場合は、正規表現を使用するpreg_match_all関数が効果的な代替手段となります。 例えば、preg_match_all('/\p{L}+/u', $string, $matches)のように記述することで、\p{L}(Unicodeのあらゆる「文字」カテゴリにマッチ)とu修飾子(UTF-8モード)を組み合わせ、マルチバイト文字を含む単語も正しく認識し、その数を取得できます。 したがって、文字列の文字エンコーディングに合わせて、適切な関数を選択することが重要です。

str_word_count関数は主にASCII文字列の単語カウントに適しており、UTF-8などのマルチバイト文字列では単語を正しく認識できない点に注意が必要です。例えば、日本語の文字列をこの関数で処理すると、期待通りの単語数が得られません。UTF-8文字列を正確に単語カウントしたい場合は、代替手段としてpreg_match_all関数と、\p{L}+/uのようなUnicode対応の正規表現を使用してください。これにより、マルチバイト文字で構成される単語も適切に検出できます。コードを利用する際は、対象文字列のエンコーディングと、それに対応した関数の選択が重要であることを理解してください。

PHP str_word_count関数で単語を数えたり取得する

1<?php
2
3/**
4 * str_word_count関数の使用例。
5 * この関数は、文字列内の単語の数を数えたり、単語を配列として取得したりします。
6 * 主にテキスト分析やコンテンツ処理に役立ちます。
7 */
8
9// サンプルとして使用する文字列を定義します。
10$text = "PHPはパワフルなプログラミング言語です。バージョン8は多くの改善を含みます。";
11
12echo "元の文字列: " . $text . "\n\n";
13
14// ----------------------------------------------------
15// 形式 0 (デフォルト): 単語の数を数えます。
16// 戻り値: int
17// ----------------------------------------------------
18$wordCount = str_word_count($text, 0);
19echo "形式 0 (単語の数): " . $wordCount . " 個\n\n";
20
21// ----------------------------------------------------
22// 形式 1: 単語を要素とする配列を返します。
23// 戻り値: array
24// ----------------------------------------------------
25$wordsArray = str_word_count($text, 1);
26echo "形式 1 (単語の配列):\n";
27print_r($wordsArray);
28echo "\n";
29
30// ----------------------------------------------------
31// 形式 2: キーが単語のオフセット(文字列内での位置)、値が単語となる連想配列を返します。
32// 戻り値: array (キー: int, 値: string)
33// ----------------------------------------------------
34$wordsWithOffset = str_word_count($text, 2);
35echo "形式 2 (単語とオフセットの連想配列):\n";
36print_r($wordsWithOffset);
37echo "\n";
38
39// ----------------------------------------------------
40// オプション: `$characters` 引数を使用して、特定の文字も単語の一部として扱います。
41// 例えば、「-」や「.」などの記号を単語の一部と見なしたい場合に使用します。
42// ----------------------------------------------------
43$textWithSpecialChars = "PHP-8は、Web開発の未来です。バージョン8.1も注目です。";
44echo "特殊文字を含む文字列: " . $textWithSpecialChars . "\n\n";
45
46// ハイフンとドットを単語の一部として認識させる場合
47$wordsWithCustomChars = str_word_count($textWithSpecialChars, 1, '-.');
48echo "形式 1 (カスタム文字 '-' と '.' を単語の一部として認識):\n";
49print_r($wordsWithCustomChars);
50
51?>

PHPのstr_word_count関数は、文字列内の単語を数えたり、単語を抽出して配列として取得したりするために使用されます。この関数は、主にテキストの分析やコンテンツ処理において非常に便利です。

この関数は最初の引数 $string に処理対象の文字列を受け取ります。第二引数 $format はオプションで、関数の戻り値の形式を指定します。デフォルト値は 0 です。

$format0 を指定すると、関数は文字列内の単語の総数を整数 (int) で返します。 $format1 を指定すると、文字列から抽出された各単語が要素として格納された配列 (array) を返します。これにより、単語一つ一つにアクセスして処理できます。 $format2 を指定すると、単語が文字列内で出現する位置(オフセット)をキーとし、対応する単語を値とする連想配列 (array) が返されます。単語の位置情報を利用したい場合に役立ちます。

さらに、オプションの第三引数 $characters を使用することで、特定の文字を単語の一部として認識させることができます。例えば、ハイフンやドットなどの記号を単語の区切りではなく、単語を構成する文字として扱いたい場合に、その文字をこの引数に指定します。

このようにstr_word_count関数は、簡単な操作で文字列から単語に関する情報を効率的に取得できるため、システムエンジニアを目指す方々にとって、テキスト処理の基本的なツールとして活用できるでしょう。

str_word_count関数を利用する際は、第2引数の$formatによって戻り値の型(整数または配列)と内容が大きく変わる点に注意してください。0は単語の総数を、1は単語のみの配列を、2は単語とオフセット位置の連想配列を返します。第3引数$charactersを指定すると、ハイフンやドットなどの特定の記号も単語の一部として認識させることができます。この関数は主に空白で区切られた英数字の単語を想定しているため、日本語のようなマルチバイト文字列の単語分割には必ずしも適さない場合があります。その際は、期待通りの結果が得られない可能性があるため、他の文字列処理関数やライブラリの利用を検討してください。

str_word_countの動作と特殊文字の扱い

1<?php
2
3/**
4 * str_word_count 関数のさまざまな使用例を示します。
5 * キーワード "str_word_count in php not working" に対応するため、
6 * 特に format 引数と characters 引数による挙動の違いを明確にします。
7 */
8
9// テスト用の文字列をいくつか定義します。
10$text1 = "Hello world! This is a simple test.";
11$text2 = "PHP is a server-side scripting language.";
12$text3 = "Don't forget to use 'str_word_count' correctly-managed."; // アポストロフィとハイフンを含む
13
14echo "--- str_word_count の基本動作 ---" . PHP_EOL;
15
16// 1. デフォルト (format = 0): 単語の数を整数で返します。
17$wordCount1_format0 = str_word_count($text1);
18echo "文字列: '{$text1}'" . PHP_EOL;
19echo "単語数 (format=0): {$wordCount1_format0} (型: " . gettype($wordCount1_format0) . ")" . PHP_EOL . PHP_EOL;
20
21// 2. format = 1: 単語の配列を返します。
22$wordCount1_format1 = str_word_count($text1, 1);
23echo "文字列: '{$text1}'" . PHP_EOL;
24echo "単語リスト (format=1): " . print_r($wordCount1_format1, true) . " (型: " . gettype($wordCount1_format1) . ")" . PHP_EOL;
25echo PHP_EOL;
26
27// 3. format = 2: キーが単語の開始位置、値が単語の連想配列を返します。
28$wordCount1_format2 = str_word_count($text1, 2);
29echo "文字列: '{$text1}'" . PHP_EOL;
30echo "単語位置とリスト (format=2): " . print_r($wordCount1_format2, true) . " (型: " . gettype($wordCount1_format2) . ")" . PHP_EOL;
31echo PHP_EOL;
32
33echo "--- 特殊文字 (characters 引数) の扱い ---" . PHP_EOL;
34
35// 4. 特殊文字を含む文字列での動作確認 (デフォルトではアポストロフィやハイフンは単語区切りとみなされることが多い)
36echo "文字列: '{$text3}'" . PHP_EOL;
37$wordCount3_default = str_word_count($text3, 1);
38echo "デフォルトでの単語リスト: " . print_r($wordCount3_default, true) . PHP_EOL;
39echo "デフォルトでの単語数: " . str_word_count($text3) . PHP_EOL; // "Don't"が"Don"と"t"に分かれる、"correctly-managed"が"correctly"と"managed"に分かれる
40
41// 5. characters 引数を使用して、特殊文字を単語の一部として含める例。
42//    ここではアポストロフィ (') とハイフン (-) を単語の一部とみなします。
43$charactersToInclude = "'-";
44$wordCount3_with_chars = str_word_count($text3, 1, $charactersToInclude);
45echo "アポストロフィとハイフンを単語の一部とみなした場合の単語リスト (characters='{$charactersToInclude}'): " . print_r($wordCount3_with_chars, true) . PHP_EOL;
46echo "単語数: " . str_word_count($text3, 0, $charactersToInclude) . PHP_EOL; // "Don't"は1単語、"correctly-managed"も1単語としてカウントされる
47
48echo PHP_EOL . "--- 別の文字列での確認 ---" . PHP_EOL;
49
50// 別の文字列で format=0 と characters 引数の組み合わせを確認
51echo "文字列: '{$text2}'" . PHP_EOL;
52$wordCount2_format0 = str_word_count($text2);
53echo "単語数 (format=0): {$wordCount2_format0}" . PHP_EOL;
54// 例えば、ピリオドを単語の一部とみなしたい場合は、以下のように指定できます
55// $wordCount2_with_dot = str_word_count($text2, 0, '.');
56// echo "ピリオドを単語の一部とみなした場合の単語数: {$wordCount2_with_dot}" . PHP_EOL;
57
58?>

PHPのstr_word_count関数は、指定した文字列に含まれる単語の数を数えたり、文字列から単語そのものを取得したりするための関数です。第一引数$stringには、処理を行いたい対象の文字列を指定します。

第二引数$formatは、関数の戻り値の形式を決定します。この引数に0を指定すると、文字列内の単語の総数が整数として返されます。1を指定すると、見つかった単語を順番に格納した配列が返されます。そして2を指定した場合は、キーが単語の文字列内での開始位置、値が単語となる連想配列が返されます。これらのformat引数の違いを理解することは、「str_word_count in php not working」と感じる原因の一つを解決する上で重要です。

第三引数$charactersはオプションで、単語の一部として認識させたい追加の文字を指定するために使用します。デフォルトでは、アルファベット以外の記号(例えばアポストロフィやハイフンなど)は単語の区切りとみなされる傾向があります。しかし、$characters引数に「'-」のように指定することで、「Don't」や「correctly-managed」のような文字列を一つの単語として正しくカウントしたり、取得したりすることが可能になります。この引数を適切に設定しないと、意図しない単語数や単語リストが返されることがあり、これも「正しく動作しない」と感じる原因となりえます。

このように、str_word_count関数はformat引数によって戻り値の型(整数または配列)が変化し、characters引数によって単語の認識ルールを細かく制御できるため、これらの引数の使い方を理解することが、期待通りの結果を得るために非常に重要です。

str_word_count関数は、第二引数formatによって戻り値の型と内容が大きく変わる点に注意してください。format=0(デフォルト)では単語の数が整数で、format=1format=2では単語の配列が返されます。

特に「str_word_count in php not working」と感じる主な原因は、第三引数charactersの扱いです。この引数は、アポストロフィ(')やハイフン(-)などの特殊文字を「単語の一部」として認識させるかどうかを指定します。デフォルトではこれらの文字は単語の区切りとみなされるため、「Don't」が「Don」と「t」に分割されるなど、意図しない結果になることがあります。

期待する単語の定義に合わせてformatcharacters引数を適切に設定することが、この関数を正しく、そして安全に利用するための重要なポイントです。

関連コンテンツ

関連プログラミング言語