文字列をトークンに分割する

# strtok

(PHP 4, PHP 5, PHP 7, PHP 8)

strtok — 文字列をトークンに分割する

### 説明

function strtok(string `$string`, string `$token`): string|false

代替のシグネチャ (名前付き引数をサポートしていません):

function strtok(string `$token`): string|false

strtok() は文字列 (`string`) を 何らかの文字 `token` によって区切られている小さな文字列 (トークン) に分割します。 "This is an example string" のような文字列がある場合、 空白文字を `token` に指定することでこの文字列を個々の単語に分割することができます。

strtok は最初のコールの時のみ `string` 引数を使用することに注意してください。 strtok は、文字列のどこにいるのかの情報を保持しているため、 2回目以降のコールでは `token` のみが必要です。 最初からやりなおす場合や新しい文字列をトークンに分割する場合、 初期化するために再度 `string` 引数を指定して strtok をコールします。 文字列は、`token` の文字のどれかが見つかった場合はトークンに分割されます。

> 注意:

> この関数は、explode() 関数に慣れている人が期待する動きとは、 ちょっと異なる振る舞いをします。 まず、`token` の ふたつ以上の連続する文字が文字列に含まれていた場合、 その連続する文字は、単一の区切り文字として扱われます。 また、文字列の最初と最後に存在する `token` は無視されてしまいます。 たとえば、文字列が `";aaa;;bbb;"` の場合、 `token` に `";"` を指定して strtok() を 連続してコールすると、 "aaa" と "bbb" を返し、最後に `false` を返します。 結果として、文字列はふたつにしか分割されません。 一方で `explode(";", $string)` は 5つの要素からなる配列を返します。

### パラメータ

`string`

  より小さい文字列 (トークン) に分割する文字列。

`token`

  `string` を分割する際に使用する区切り文字。

### 戻り値

トークンを文字列で返します。 トークンがない場合は、`false` を返します。

### 変更履歴

バージョン | 説明
--- | ---
8.3.0 | `token` が渡されない場合、`E_WARNING` が発生するようになりました。

### 例

例1 strtok() の例

    <?php
    $string = "This is\tan example\nstring";
    /* タブと改行をトークンの区切りとして使用します */
    $tok = strtok($string, " \n\t");

    while ($tok !== false) {
        echo "Word={$tok}\n";
        $tok = strtok(" \n\t");
    }
    ?>

例2 空の部分が見つかった場合の strtok() の動作

    <?php
    $first_token  = strtok('/something', '/');
    $second_token = strtok('/');
    var_dump($first_token, $second_token);
    ?>

上の例の出力は以下となります。

    string(9) "something"
        bool(false)

例3 strtok() と explode() の違い

    <?php
    $string = ";aaa;;bbb;";
    $parts = [];
    $tok = strtok($string, ";");
    while ($tok !== false) {
        $parts[] = $tok;
        $tok = strtok(";");
    }
    echo json_encode($parts),"\n";
    $parts = explode(";", $string);
    echo json_encode($parts),"\n";

上の例の出力は以下となります。

    ["aaa","bbb"]
    ["","aaa","","bbb",""]

### 注意

警告

この関数は論理値 `false` を返す可能性がありますが、`false` として評価される値を返す可能性もあります。 詳細については 論理値の セクションを参照してください。この関数の返り値を調べるには ===演算子 を 使用してください。

### 参考

- explode() - 文字列を文字列により分割する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open