免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3039 | 回复: 0
打印 上一主题 下一主题

php函数strspn()和strcspn()的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-18 22:07 |只看该作者 |倒序浏览
最近在学习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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP