PHP在拆分字符串上substr和explode的选择

一、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-08-07 18:59:22

PHP在拆分字符串上substr和explode的选择的相关文章

SQL中拆分字符串substr及统计字符出现频数replace用法实例讲解

一.拆分字符串为若干行 例一:要求将表emp中的'king'按照每行一个单词拆成四行 注意:substr(str,pos):截取pos位置开始的字符: substr(str,pos,len):从pos位置开始,选出接下去的len个字符 表emp: eid ename 1 ring 2 king 3 ting 4 ping 首先,建立表tmp(基干表,为了配合表一使用): tid 1 2 3 4 5 然后,select emp.ename,tmp.tid from emp,tmp where em

禁止字符串 字符串上的动态规划

// 禁止字符串 字符串上的动态规划 // 挑战程序设计第二版 page 368 // 考虑只由'A','G','C','T'四种字符组成的DNF字符串 // 给定一个长度为k的字符串S,计算长度恰好为n的且 // 不包含S的字符串的个数输入结果对10009取膜 // 1<=k<=100 // 1<=n<=10000 // // 这道题想动态规划,肯定是n*k的算法,即10的七次方以内 // 的复杂度 // // 但是,之后就卡住了... // // 仔细研习了书上的思路,发现状态

【SQL】sql版Split函数。用于拆分字符串为单列表格

原文:[SQL]sql版Split函数.用于拆分字符串为单列表格 功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行.可选是否移除空格子串和重复项.市面上类似的函数不算少,但大多都是在循环中对原串进行改动,我感觉这样不好,虽然不知道sql的字符串是不是像.net的一样具有不可变性,但感觉尽量不要去动原串最好,万一sql的字串也不可变,那变一次就要产生一份,尤其是每圈循环都在变,内存消耗让人心疼,所以才有重新造个轮子的想

字符串 上

字符串 从概念上讲,C中没有字符串数据类型 C中使用字符数组来模拟字符串 C中字符串是以'\0'结束的字符数组 C中字符串可以分配于栈空间.堆空间或者只读存储区 C中字符串常量表示一块包括字符串中所有字符以及一个空字符('\0')的内存区域的地址 字符串长度就是字符串所包含字符的个数 C中字符串长度指的是第一个'\0'字符前出现的字符个数 C通过'\0'结束符来确定字符串的长度 字符串 存储 字符数组存储字符串.储存在栈中,可以修改任意一字符 指针存储字符串.指针存储在栈中,字符串存储在只读存储

PHP 字符串获取 substr 与 strstr 函数-来自PHP教程

PHP 字符串获取 substr 与 strstr 函数 PHP 字符串获取 用于从字符串中获取指定字符串. 相关函数如下: substr():从字符串中获取其中的一部分 strstr():查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符 subchr():同 strstr() strrchr():查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符 substr() substr() 函数用于从字符串中获取其中的一部分,返回一个字符

jquery拼接和拆分字符串,并加入特殊符号

$.fn.combineInput = function (_config) { var _config = $.extend({ addStr: "" }); var td = $(this); var input = td.find("input"); var inputLength = input.length; var _temp = []; var _tempStr = ''; var pack = { init: function () { for (v

python 字节字符串上的字符串操作

问题:想在字节字符串上执行普通的文本操作(比如移除,搜索和替换). 解决方案 1)字节字符串同样也支持大部分和文本字符串一样的内置操作.比如: >>> data = b'Hello World' >>> data[0:5] b'Hello' >>> data.startswith(b'Hello') True >>> data.split() [b'Hello', b'World'] >>> data.replace

python 拆分字符串(3.0)

拆分字符串 1. def my_split(s, ds): l = [s] for d in ds: res = [] list(map(lambda x: res.extend(x.split(d)), l)) l = res return l s = 'abc;dwwewfe;rqger|gert;klg\tjotrg\tpa|s;dooo' ds = ';\t|' l = my_split(s, ds) print(l) output: ['abc', 'dwwewfe', 'rqger'

StringTokenizer拆分字符串

今天要做一个过滤特殊字符的需求, 看了下公司以前过滤特俗字符代码, 用的居然是 StringTokenizer, 完全不熟悉啊, 于是恶补了一下, 把StringTokenizer在JDK中的文档也翻出来读了几遍, 硬是没怎么看懂, 后来网上搜了下, 搜到下面链接这篇, 让我瞬间解惑. Split()拆分字符串与StringTokenizer拆分字符串 jdk中的StringTokenizer 原文地址:https://www.cnblogs.com/goujh/p/11039850.html