比较字符串
PHP有两个操作符和6个函数用于字符串间相互比较。
精确比较
你可以用==和===操作符来比较两个字符串是否相等。这两个操作符的不同在于它们如何处理非字符串数据类型的操作数。==操作符把非字符串操作数转换成字符串,所以它认为3和”3“是相等的。===操作符不进行转换,并且如果参数的数据类型不同就返回false。
比较操作符(<、<=、>和>=)也用于字符串。当比较操作符的一个参数是数字时,其它参数也将被转换为数字。
要明确地将两个数作为字符串比较,可以在必要时先把数字转换为字符串,使用strcmp()函数。
处理和查找字符串
子串,substr函数复制部分字符串
$piece=substr(string,start[,length]);
start参数是在string中要开始复制的位置,如果是0的话,就是说从字符串开头开始复制。length参数是要复制字符的个数(默认是复制到字符串末尾)。例如:
$name="Fred Flintstone";
$fluff=substr($name,6,4); //$fluff 是"lint"
$sound=substr($name,11); //$sound是"tone"
要知道一个小字符串在一个大字符串中出现的次数,可以使用substr_count()函数:
$number=substr_count(big_string,small_string);
substr_replace()函数允许使用不同方式对字符串进行修改:
$string=substr_replace(original,new,start[,length]);
函数通过start(0的意思是字符串的开头)和length指定的值,用字符串new替换original的一部分。如果没有给出第四个参数,substr_replace()删除从start到字符串末尾的文字。
例如:
$greeting="good morning citizen";
$farewell=substr_replace($greeting,"bye",5,7);
//$farewell为"good bye citizen"
设定length为0来实现无删除的插入:
$farewell=substr_replace($farewell,"kind",9,0);
//$farewell 为"good bye kind citizen"
设定new为""来来实现无插入的删除:
$farewell=substr_replace($farewell,"",8);
//$farewell为"good bye"
下面是说明如何在字符串的开头插入内容:
$farewell=substr_replace($farewell,"now it's time to say",0,0);
//$farewell为"now it's time to say good bye"'
如果start为负值,则指定从字符串末尾开始到字符串开头替换的字符数:
$farewell=substr_replace($farewell,"riddance",-3);
//$farewell为"now it's time to say good riddance"
如果length为负值,则指定从字符串末尾开始删除的字符个数:
$farewell=substr_replace($farewell,"",-8,-5);
//$farewell为"now it's time to say good dance"
各种字符串函数
strrev()函数收一个字符串然后返回一个翻转顺序的拷贝:
$string=strrev(string);
例如:
echo strrev("There is no cabal"); //labas on si erehT
str_repeat()函数接收一个字符串和一个计数参数,然后返回一个由参数string重复count次组成的新字符串:
$repeated=str_repeat(string,count);
例如,创建一个分隔线:
echo str_repeat('-',40);
str_pad()函数用另一个字符串填充一个字符串。可以选择用什么样的字符串来填充,以及加在左边、右边或两边都加:
$padded=str_pad(to_pad,length[,with[,pad_type]]);
默认是以空格加在字符串右边:
$string=str_pad('Fred Flintstone',30);
echo "$string:35:Wilma";
Fred Flintstone :35:Wilma
可选的第三个参数是要增加的字符串:
$string=str_pad('Fred Flintstone',30,'.');
echo "{$string}35";
Fred Flintstone........35
可选的第四个参数可以是STR_PAD_RIGHT(默认)、STR_PAD_LEFT或STR_PAD_BOTH(左右都加,长度均分,使原字符串居中对齐)。例如:
echo '['.str_pad('Fred Flintstone',30,'',STR_PAD_LEFT)."]
";
echo '['.str_pad('Fred Flintstone',30,'',STR_PAD_BOTH)."]
";
[ Fred Flintstone]
[ Fred Flintstone ]
分解字符串
PHP提供几个函数来将字符串分解为更小的部分。按复杂性递增排序,它们是explode()、strtok()、sscanf()。
$array=explode(separator,string[,limit]);
implode(),用含有几个较小字符串的数组创建一个大字符串:$string=implode(separator,array);join()函数是implode()函数的别名。
字符串查找函数
有一些函数用于在一个较大字符串中查找字符串或字符。它们分为3个系列:strpos()和strrpos()返回1个位置,strstr()、strchr()等返回找到的字符串,strspn()和strcspn()返回字符串的开头有多少与掩码匹配。
按字符的ASCII顺序值来查找。因此,下面的函数调用是相等的(因为44是逗号的ASCII值):
$pos=strpos($large,","); //查找第一个逗号
$pos=strpos($large,44); //也查找第一个逗号
如果没有找到指定的子串,所有的字符串查找函数都会返回false。如果子串出现在字符串的开头,函数就返回0。因为false可以转换为数字0,所以在测试失败时使用===来比较返回值:
if($pos===false){
//没有找到子串
}else{
//找到子串,$pos是字符串的偏移量。
}
返回位置的查找
strpos()函数查找一个小字符串在较大字符串中第一次出现的位置:
$position=strpos(large_string,small_string);
如果没有找到小字符串,strpos()返回false。
strrpos()函数查找某个字符(注意是单个字符而不是字符串)在字符串中最后一次出现的位置。它的参数及返回值类型和strpos()相同。
如果将一个字符串作为第二个参数传递给strrpos(),只查找参数字符串的首字符。
返回剩余字符串的查找
strstr()函数查找一个小字符在大字符串中第一次出现的位置,并返回从小字符串开始的部分。
strstr()的变种有:
stristr()//不区分大小写的strstr();
strchr()//strstr()的别名
strrchr()//查找字符在字符串中最后出现的位置
和strrpos()一样,strrchr()向后查找字符串,但是都只对字符,而不是一整个字符串。
strspn()和strcspn()函数告诉你字符串开头有多少个指定的字符:
$length=strspn(string,charset);
strcspn()里的c代表complement(补足物),它说明字符串的开头有多少不是由字符集中的字符组成。当感兴趣的字符比不感兴趣的字符多时,使用strcspn()函数。
分解URL
parse_url()函数返回一个由URL成分组成的数组:
$array=parse_url(url);
例如:
$bits=parse_url('http://me:secret@example.com/cgi-bin/board?user=fred);
print_r($bits);
Array
(
[scheme]=>http
[host]=>example.com
[user]=>me
[pass]=>secret
[query]=>user=fred
)
得到的数组键名可能为scheme、host、port、user、pass、path、query和fragment。