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!'