一、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最优!
时间: 2024-12-14 02:27:48