這篇文章跟大家分享的內容是關於PHP中strpos函數的深入分析,內容很詳細,有需要的朋友可以參考一下,希望可以幫助到你們。
概述
在php中經常用strpos
判斷字串是否在另一個字串中存在, 本文介紹strpos
函數及其實現。
strpos應用程式
<?php /* strpos示例 */ // test echo 'match:', strpos('xasfsdfbk', 'xasfsdfbk') !== false ? 'true' : 'false', ';', PHP_EOL; echo 'match:', strpos('xasfsdfbk', 'fbk') !== false ? 'true' : 'false', ';', PHP_EOL; echo 'match:', strpos('xasfsdfbk', 'xs') != false ? 'true' : 'false', ';', PHP_EOL; echo 'match:', strpos('xasfsdfbk', 'sfs') !== false ? 'true' : 'false', ';', PHP_EOL; // code strpos('xasfsdfbk', 'sfs');
Warning:strpos
函數可能會傳回布林值FALSE
,但也可能回傳等同於FALSE
的非布林值。請閱讀 布爾類型章節以獲取更多資訊。應使用===
運算子來測試此函數的傳回值。
strpos系列函數
函數 | #描述 | 版本 |
---|---|---|
strpos | 找出字串首次出現的位置 | PHP 4, PHP 5, PHP 7 |
stripos | 尋找字串首次出現的位置(不區分大小寫) | PHP 5, PHP 7 |
strrpos | 計算指定字符串在目標字串中最後一次出現的位置 | PHP 4, PHP 5, PHP 7 |
strripos | #計算字串在目標字串中最後一次出現的位置(不區分大小寫) | PHP 5, PHP 7 |
#mb_strpos | 在另一個字串中首次出現的位置 | PHP 4 >= 4.0.6, PHP 5, PHP 7 |
strstr | ##找出字串的首次出現PHP 4, PHP 5, PHP 7 | |
strstr() 函數的忽略大小寫版本 | # PHP 4, PHP 5, PHP 7 | |
#計算字串出現的次數 | ##PHP 4, PHP 5, PHP 7 |
PHP(strpos)原始碼
strpos(ext/standard/string.c)
- PHP原始碼位址
-
#
PHP_FUNCTION(strpos) { zval *needle; zend_string *haystack; char *found = NULL; char needle_char[2]; zend_long offset = 0; #ifndef FAST_ZPP if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sz|l", &haystack, &needle, &offset) == FAILURE) { return; } #else ZEND_PARSE_PARAMETERS_START(2, 3) Z_PARAM_STR(haystack) Z_PARAM_ZVAL(needle) Z_PARAM_OPTIONAL Z_PARAM_LONG(offset) ZEND_PARSE_PARAMETERS_END(); #endif if (offset ZSTR_LEN(haystack)) { php_error_docref(NULL, E_WARNING, "Offset not contained in string"); RETURN_FALSE; } if (Z_TYPE_P(needle) == IS_STRING) { if (!Z_STRLEN_P(needle)) { php_error_docref(NULL, E_WARNING, "Empty needle"); RETURN_FALSE; } found = (char*)php_memnstr(ZSTR_VAL(haystack) + offset, Z_STRVAL_P(needle), Z_STRLEN_P(needle), ZSTR_VAL(haystack) + ZSTR_LEN(haystack)); } else { if (php_needle_char(needle, needle_char) != SUCCESS) { RETURN_FALSE; } needle_char[1] = 0; found = (char*)php_memnstr(ZSTR_VAL(haystack) + offset, needle_char, 1, ZSTR_VAL(haystack) + ZSTR_LEN(haystack)); } if (found) { RETURN_LONG(found - ZSTR_VAL(haystack)); } else { RETURN_FALSE; } }
php_memnstr(main/php.h)
- #PHP原始碼位址
-
#define php_memnstr zend_memnstr /* 338 line*/
zend_memnstr(Zend/zend_operators.h)
- PHP原始碼位址
-
/* * 此函数的作用是在haystack中查找needle,如果不存在返回null,如果存在,返回指向haystack中needle头字符的指针 */ zend_memnstr(const char *haystack, const char *needle, size_t needle_len, const char *end) { const char *p = haystack; const char ne = needle[needle_len-1]; ptrdiff_t off_p; size_t off_s; if (needle_len == 1) { return (const char *)memchr(p, *needle, (end-p)); } off_p = end - haystack; off_s = (off_p > 0) ? (size_t)off_p : 0; if (needle_len > off_s) { return NULL; } if (EXPECTED(off_s
memchr(string.h)
- Linux核心版-原始碼位址
-
/* 头文件:#include <string.h> 定义函数:void * memchr(const void *s, char c, size_t n); 函数说明:memchr()从头开始搜寻s 所指的内存内容前n 个字节,直到发现第一个值为c 的字节,则返回指向该字节的指针。 返回值:如果找到指定的字节则返回该字节的指针,否则返回0。 */ #ifndef __HAVE_ARCH_MEMCHR void *memchr(const void *s, int c, size_t n) { const unsigned char *p = s; while (n-- != 0) { if ((unsigned char)c == *p++) { return (void *)(p - 1); } } return NULL; } EXPORT_SYMBOL(memchr); #endif</string.h>
memcmp(string.h)
- #Linux核心版-原始碼位址
-
/* 字符串函数memcmp 原型:extern int memcmp(void *buf1, void *buf2, unsigned int count); 功能:比较内存区域buf1和buf2的前count个字节 说明:当buf1<buf2>buf2时,返回值>0 */ #ifndef __HAVE_ARCH_MEMCMP #undef memcmp __visible int memcmp(const void *cs, const void *ct, size_t count) { const unsigned char *su1, *su2; int res = 0; for (su1 = cs, su2 = ct; 0 </buf2>
提示
strpos函數對大小寫敏感。
相關推薦:
PHP中鎖定機制的應用以上是PHP中strpos函數的深入分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

phpisusedforsenderemailsduetoitsbuilt-inmail()函數andsupportivelibrariesLikePhpMailerAndSwiftMailer.1)usethemail()functionForbasiceMails,butithasimails.2)butithasimail.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显著提升PHP应用的性能。

依賴性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增強量強制性,可驗證性和MATIALWINABIOS.ItallowSpasspassingDepentenciesLikEdenciesLikedAbaseConnectionStoclasseconnectionStoclasseSasasasasareTers,interitationAseTestingEaseTestingEaseTestingEaseTestingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境