説明
stringfalse strtok(string $string
, string $token
)
代替のシグネチャ (名前付き引数をサポートしていません):
stringfalse strtok(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",""]
注意
警告この関数は論理値
false
を返す可能性がありますが、false
として評価される値を返す可能性もあります。
詳細については 論理値の
セクションを参照してください。この関数の返り値を調べるには
===演算子 を
使用してください。