- 论坛徽章:
- 0
|
最近在学习PHP,发现函数strspn()和strcspn()容易糊涂,记录如下:
根据
http://www.php.net/strspn
上的说明:
Finds the length of the first segment of a string consisting entirely of characters contained within a given mask
int strspn ( string $subject , string $mask [, int $start [, int $length ]] )
strspn()函数应该是返回字符串$subject中,第一个完全由字符串条件$mask中字符组成的部分的长度。但是我做了些实验,却一直感觉有问题。
比如:
echo strspn("a123456","123456");
照说结果应该很清楚,是6,但是我一直得出0的结果?!
但是,如果:
echo strspn("a123456","123456",1);
结果就是6了!
可见,函数strspn()应该是:返回字符串$subject中,从$start处开始符合$mask中字符的子字符串长度。如果开始处的第一个字符不符合,那么返回的结果就是0!
同样是上面的例子,变为:
echo strspn("ab123456","123456",1);
结果就又成了0!
可见,
http://www.php.net/strspn
上的定义不是很准确,容易造成误解!
同样的问题也出现在strcspn()函数中,按照
http://www.php.net/strcspn
:
int strcspn ( string $str1 , string $str2 [, int $start [, int $length ]] )
Returns the length of the initial segment of str1 which does not contain any of the characters in str2 .
但是,实际上,函数strcspn()应该是:返回字符串$str1中,从$start处开始,不符合$str2中字符的子字符串长度。如果开始处的第一个字符就符合,那么返回的结果就是0!
简单的说,strcspn()就是返回字符串$str1中起首不符合$str2的子字符串长度。
如:
echo strcspn("a123456","a");
结果为0,而:
echo strcspn("a123456","a",1);
结果就是6啦。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/105902/showart_2097861.html |
|