根据官方文档该函数用于“计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度”
strspn ( string $subject , string $mask [, int $start [, int $length ]] )
返回
subject
中全部字符仅存在于mask
中的第一组连续字符(子字符串)的长度。
如果省略了 start
和 length
参数,则检查整个 subject
字符串;如果指定了这两个参数,则效果等同于调用strspn(substr($subject, $start, $length), $mask)
(更多信息,参见 substr )。
然后给出例子
<?php
$var = strspn("42 is the answer to the 128th question.", "1234567890");
//结果是2
?>
不得不说官方文档就是官方文档,这官方的词耍起来看的我一脸懵逼,确实当时没看明白是咋回事,可能鄙人脑子不太灵光,经过 C语言的文档(C也有一样的函数),我才明白这函数啥意思,这一点可能说明PHP文档翻译的不太好啊。
来看一下C文档对该函数的说明
头文件:
#include <string.h>
strspn() 函数用来计算字符串 str 中连续有几个字符都属于字符串 accept,其原型为:
size_t strspn(const char *str, const char * accept);
【函数说明】strspn()
从参数 str 字符串的开头计算连续的字符,而这些字符都完全是 accept 所指字符串中的字符。简单的说,若strspn()
返回的数值为n,则代表字符串 str 开头连续有 n 个字符都是属于字符串 accept 内的字符。
【返回值】返回字符串 str 开头连续包含字符串 accept 内的字符数目。所以,如果 str 所包含的字符都属于 accept,那么返回 str 的长度;如果 str 的第一个字符不属于 accept,那么返回 0。
注意:检索的字符是区分大小写的。
重点看返回值这部分,返回str 开头连续包含accept内字符数目
开头是从str第一个字符开始算,连续表示,str一个接一个的往下对比
如果 str第一个字符不属于accept 则不满足str开头字符这个条件,str都属于accept则满足开头连续两个条件,所以返回字符串str长度
下面给出测试的例子
$a = 'bdtaf';
$b = 'absasdfabdf';
echo strspn($a, $b);
//结果是2 首先检索b,b在$b中,接下来看d,d也在,但是接下来的t不在,所以结果为2
$a = 'bdaaf';
$b = 'absasdfabdf';
echo strspn($a, $b);
//结果为5 b,d,a,f 这4个字母均在$b中出现,其中a出现2次,所以结果为5