(PHP 4, PHP 5, PHP 7, PHP 8)
strtok — 文字列をトークンに分割する
$string
, string $token
): string|false代替のシグネチャ (名前付き引数をサポートしていません):
$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
を返します。
例1 strtok() の例
<?php
$string = "This is\tan example\nstring";
/* タブと改行をトークンの区切りとして使用します */
$tok = strtok($string, " \n\t");
while ($tok !== false) {
echo "Word=$tok<br />";
$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",""]