PHP在拆分字符串上substr和explode的選擇
阿新 • • 發佈:2017-09-10
com 9.png 又是 images 最優 字符串 es2017 分享 aaa
一、explode
$str = ‘data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlcAAAECCAIAAABc8mUKAAAg...‘; $tmpArr = explode(‘,‘, $str); $a = $tmpArr[0]; $b = $tmpArr[1];
其中,OP數為11,執行操作用到了7個不同的函數
二、substr+strpos
$str = ‘data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlcAAAECCAIAAABc8mUKAAAg...‘; $a = substr($str, 0, strpos($str, ‘,‘)); $b = substr($str, strpos($str, ‘,‘));
其中,OP數為21,執行操作用到了6個不同的函數
三、分析
1、substr+strpos調用的函數要比explode少1個。
2、substr+strpos的3、4行各自調用了10次函數,也就是說,如果只獲取字符串的開頭或者結尾的話,substr+strpos與explode調用函數的次數是一致的。
3、假如字符串存在固定的開頭或結尾,則可以不要使用諸如strpos之類的方法去確定字符位置,那麽其Opcode層又是怎麽樣的呢?
再次修改了代碼分析一下,如下:
$str = ‘data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlcAAAECCAIAAABc8mUKAAAg...‘; $a = substr($str, 0, 20);
這時,OP數為8,執行操作用到了6個不同的函數
OP數的減少在意料之中,但使用的函數並未減少,顯然strpos用到的函數是與substr重合的!
四、結論
1、獲取開頭或結尾部分字符串時,優先選用 substr+strpos。
2、獲取固定開頭或結尾時,使用substr並指定起始或長度。
3、當字符串拆分出來的片段大於1時,explode最優!
PHP在拆分字符串上substr和explode的選擇