1. 程式人生 > >PHP在拆分字符串上substr和explode的選擇

PHP在拆分字符串上substr和explode的選擇

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的選擇