PHP使用strtok()函数
与函数explode()每次都将一个字符串全部分割成若干小块不同,strtok()函数一次只从字符串中取出一些片段(称为令牌)。对于一次从字符串中取出一个单词的处理来说,strtok()函数比explode()函数的效果更好。
strtok()函数的原型如下所示:
string strtok(string input,string separator);
分隔符可以是一个字符,也可以是一个字符串,但是,需要注意的是,输入的字符串会根据分隔符字符串中的每个字符来进行分割,而不是根据整个分隔字符串来分隔。
函数strtok()的调用并不像它的函数原型中那样简单。为了从字符串中得到第一个令牌,可以调用strtok()函数,并带有两个输入参数:一个是要进行令牌化处理的字符串,还有一个就是分隔符。为了 从字符串中得到令牌序列,可以只用==一个参数==——分隔符。 该函数会保持它自己的内部指针在字符串中的位置。如果想重置指针,可以重新将该字符串传给这个函数。
strtok()函数的典型应用如下所示:
<?php
$str = "He told me:'Hello world! but I don't have any money!'";
echo "原字符串:<br>";
var_dump($str);
$token = strtok($str,"o");
echo "使用‘o’分割字符串:" ."<br>";
var_dump($token);
$token = strtok($str,"oe");
echo "使用‘oe’分割字符串:" ."<br>";
var_dump($token);
//重置指针,重新将该字符串传给这个函数。
$token = strtok($str,"oe");
echo "使用‘oe’分割字符串的令牌序列:" ."<br>";
echo $token ."<br>";
while($token!=""){
$token = strtok("oe"); //继续使用上次的指针位置向后分割字符串
echo $token."<br>";
}
输出:
原字符串:
string 'He told me:'Hello world! but I don't have any money!'' (length=53)
使用‘o’分割字符串:
string 'He t' (length=4)
使用‘oe’分割字符串:
string 'H' (length=1)
使用‘oe’分割字符串的令牌序列:
H
t
ld m
:'H
ll
w
rld! but I d
n't hav
any m
n
y!'