php strstr源碼解析
strstr是php中一個常用的字符串函數,其作用是在字符串中查找子字符串并返回該子字符串第一次出現的位置之后的部分。
例如:
<?php // 查找hello在字符串中第一次出現的位置,并返回該位置之后的字符串 $str = "Hello world!"; echo strstr($str,"Hello"); ?>
上述例子中,會返回"Hello world!",因為"Hello"在字符串的開頭。
下面我們來看一下strstr函數的源碼:
function strstr($haystack, $needle, $part = FALSE) { if (!is_string($haystack) || !is_string($needle)) { return FALSE; } $pos = strpos($haystack, $needle); if ($pos === FALSE) { return FALSE; } if ($part === FALSE) { return substr($haystack, $pos); } else { return substr($haystack, 0, $pos + strlen($needle)); } }
函數的第一個參數是待查找的字符串,第二個參數是需要查找的子字符串,第三個參數表示是否返回子字符串之前的部分,取值為TRUE或FALSE。
下面我們分別來看一下strstr函數的實現過程:
首先是參數的檢查。如果$haystack和$needle不是字符串類型,函數返回FALSE。這一步主要是為了判斷輸入的參數是否合法。
if (!is_string($haystack) || !is_string($needle)) { return FALSE; }
接下來是查找子字符串在字符串中的位置,如果沒有找到,函數同樣返回FALSE。
$pos = strpos($haystack, $needle); if ($pos === FALSE) { return FALSE; }
如果$part為FALSE(即不需要返回子字符串之前的部分),則直接返回從子字符串第一次出現的位置開始的字符串。
if ($part === FALSE) { return substr($haystack, $pos); }
如果$part為TRUE,需要返回子字符串之前的部分,則返回從開頭到子字符串第一次出現的位置及子字符串本身的字符串。
else { return substr($haystack, 0, $pos + strlen($needle)); }
至此,我們已經對strstr函數的源碼有了一個大體的把握。接下來我們可以結合實際應用,看一下strstr函數的更多用法。
例如,對于一個字符串"user name: myname",如果我們需要提取字符串中冒號后面的部分,可以使用如下代碼:
$str = "user name: myname"; echo strstr($str, ":");
執行結果為" : myname",注意這里返回的結果是" : myname"而非"myname",這是因為"strstr"會返回冒號之后的字符串,而不包括冒號本身。如果要去掉冒號,我們可以再加上一個字符串函數"trim":
$str = "user name: myname"; echo trim(strstr($str, ":"), ":");
執行結果為"myname",這里我們先使用"strstr"去掉冒號之前的部分,再用"trim"去掉冒號。需要注意的是,如果字符串中有多個冒號,并且需要提取最后一個冒號之后的字符串,我們可以使用"strrpos"函數來查找最后一個冒號出現的位置。
綜上所述,strstr函數不僅僅可以用來查找子字符串,還可以結合其他字符串函數進行復雜的字符串處理。希望這篇文章對大家有所幫助!