(PHP 4, PHP 5, PHP 7, PHP 8)
strtok — 标记分割字符串
可选 token (不支持命名参数):
strtok() 将字符串 string
分割为若干子字符串,每个子字符串以
token
中的字符分割。这也就意味着,如果有个字符串是 "This is an example string",
你可以使用空格字符作为 token
,将这句话分割成独立的单词。
注意,仅第一次调用 strtok 函数时才使用 string
参数。
随后每次调用 strtok 都将只使用 token
参数,因为它会记住它在当前字符串中的位置。
如果要重新开始分割一个新的字符串,你需要再次使用 string
参数来调用 strtok 函数来对其进行初始化。
注意,可以在 token
参数中使用多个字符。字符串将被 token
参数中任何一个字符分割。
注意:
这个函数的行为可能与熟悉 explode() 的人期望略有不同。 首先,在解析的字符串中,两个或多个连续的
token
的 字符被认为是单一的分隔符。 此外,位于字符串开始或结束处的token
将被忽略。 例如,如果使用一个字符串";aaa;;bbb;"
,连续调用 strtok() 并将";"
作为一个token
将返回字符串 "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",""]