[PHP源码阅读]strpos、strstr和stripos、stristr函数,strposstristr_PHP教程
程序员文章站
2022-03-09 11:27:42
...
[PHP源码阅读]strpos、strstr和stripos、stristr函数,strposstristr
strpos
mixed strpos ( string $haystack, mixed $needle [, int $offset = 0 ] )
如果offset指定了,查找会从offset的位置开始。offset不能为负数。
返回needle第一次出现在haystack的位置。如果在haystack中找不到needle,则返回FALSE。
needle,如果needle不是字符串,它会被转换成整型数值并赋值为该数值的ASCII字符。请看下面例子。
例子
$str = "hello"; $pos = strpos($str, 111); // 111的ASCII值是o,因此$pos = 4
strpos核心源码
if (Z_TYPE_P(needle) == IS_STRING) { if (!Z_STRLEN_P(needle)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle"); RETURN_FALSE; } // 调用php_memnstr函数查找needle found = php_memnstr(haystack + offset, Z_STRVAL_P(needle), Z_STRLEN_P(needle), haystack + haystack_len); } else { // 如果不是字符串,转换成数字并赋值为该数字的ASCII字符。 if (php_needle_char(needle, needle_char TSRMLS_CC) != SUCCESS) { RETURN_FALSE; } //设置结束字符 needle_char[1] = 0; found = php_memnstr(haystack + offset, needle_char, 1, haystack + haystack_len);
} }
有一点要注意的是,如果needle不是字符串的话,会调用php_needle_char函数将needle转成整型数字并转换为其ASCII值。
查找函数
函数最后返回的是found,php_memnstr函数实现了查找的方法。那么再继续看看php_memnstr函数做了什么:
#define php_memnstr zend_memnstr
php_memnstr是函数zend_memnstr的宏定义,查看zend_memnstr函数如下:
static inline char * zend_memnstr(char *haystack, char *needle, int needle_len, char *end) { char *p = haystack; char ne = needle[needle_len-1]; if (needle_len == 1) { return (char *)memchr(p, *needle, (end-p)); } if (needle_len > end-haystack) { return NULL; } // 第一个优化,只查找end - needle_len次 end -= needle_len; while (p end) {
推荐阅读
-
[PHP源码阅读]strpos、strstr和stripos、stristr函数 strstr怎么用 strstr 单片机 c语言strstr函
-
PHP中strpos、strstr和stripos、stristr函数分析,strposstristr
-
[PHP源码阅读]strpos、strstr和stripos、stristr函数,strposstristr_PHP教程
-
PHP源码阅读:strpos、strstr、stripos、stristr函数
-
[PHP源码阅读]strpos、strstr和stripos、stristr函数,strposstristr
-
[PHP源码阅读]strpos、strstr和stripos、stristr函数,strposstristr_PHP教程
-
PHP中strpos、strstr和stripos、stristr函数分析,strposstristr_PHP教程
-
[PHP源码阅读]strpos、strstr和stripos、stristr函数 - hoohack
-
[PHP源码阅读]strpos、strstr和stripos、stristr函数 strstr怎么用 strstr 单片机 c语言strstr函
-
PHP中strpos、strstr和stripos、stristr函数分析,strposstristr