位置: 编程技术 - 正文

PHP中strpos、strstr和stripos、stristr函数分析

编辑:rootadmin

推荐整理分享PHP中strpos、strstr和stripos、stristr函数分析,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

本文为大家分析了 PHP中strpos、strstr和stripos、stristr函数,供大家参考,具体内容如下

strpos

mixed strpos ( string $haystack, mixed $needle [, int $offset = 0 ] )如果offset指定了,查找会从offset的位置开始。offset不能为负数。

返回needle第一次出现在haystack的位置。如果在haystack中找不到needle,则返回FALSE。

needle,如果needle不是字符串,它会被转换成整型数值并赋值为该数值的ASCII字符。请看下面例子。

例子

有一点要注意的是,如果needle不是字符串的话,会调用php_needle_char函数将needle转成整型数字并转换为其ASCII值。

查找函数

函数最后返回的是found,php_memnstr函数实现了查找的方法。那么再继续看看php_memnstr函数做了什么:

#define php_memnstr zend_memnstrphp_memnstr是函数zend_memnstr的宏定义,查看zend_memnstr函数如下:

第一个优化,因为(char *)memchr(p, *needle, (end-p+1)是在end ? needle_len + 1(即haystack_len+1)中查找,如果p为空,说明needle的第一个字符在p中从未出现过。

strstr

string strstr ( string $haystack, mixed $needle [, bool $before_needle = false ] )

PHP中strpos、strstr和stripos、stristr函数分析

返回needle在haystack中第一次出现的位置到结束的字符串。这个函数的区分大小写的。

如果needle在haystack中不存在,返回FALSE。

如果before_needle为true,则返回haystack中needle在haystack第一次出现的位置之前的字符串。

strstr核心源码

strstr函数的前半部分跟strpos类似,区别在于strstr函数在找到位置后,需要返回haystack部分的字符串。part变量就是调用strstr函数时传递的before_needle变量。

stripos

mixed stripos ( string $haystack, string $needle [, int $offset = 0 ] )

不区分大小写的strpos。实现方式跟下面的类似,主要是使用一份拷贝然后将需要比较的字符串转换成小写字符后进行再进行查找。

stristr

string stristr ( string $haystack, mixed $needle [, bool $before_needle = false ] ) 不区分大小写的strstr。

核心源码

可以知道,found是从php_stristr中得到的,继续查看php_stristr函数:

这个函数的功能就是将字符串都转成小写之后调用php_mennstr函数来查找needle在haystack第一次出现的位置。

总结

因为strpos/stripos返回的是位置,位置从0开始计算,所以判断查找失败都用=== FALSE更适合。

阅读PHP的源码收获挺多,一方面可以知道某个函数的具体实现原理是怎样的,另一方面可以学习到一些编程优化方案。

标签: PHP中strpos、strstr和stripos、stristr函数分析

本文链接地址:https://www.jiuchutong.com/biancheng/296285.html 转载请保留说明!

上一篇:linux下php上传文件注意事项(php实现上传文件)

下一篇:PHP生成制作验证码的简单实例(php生成证书图片)

  • 财务负责人如何解绑
  • 暂估冲回账务处理
  • 加了油的电子发票怎么导出来
  • 发票开错对方已抵扣怎么处理
  • 仓库打包用的物品计什么科目
  • 现金流量表中购建固定资产怎么计算
  • 采用重置成本计量属性的税种是
  • 员工出差火车票可以抵扣进项吗
  • 所得税季度预缴纳税申报表中弥补以前年度亏损
  • 小规模代扣代缴个税会计分录
  • 冲红发票开具
  • 规避税收风险什么意思
  • 烟丝消费税组成计税价格
  • 纸质承兑汇票到期怎么兑现,多久能到帐
  • 转让旧固定资产怎么做账
  • win8.1电脑设置在哪里
  • 如何关闭windows10自动更新
  • 速动比率计算公式多少合适
  • 跨年怎么冲销发票
  • 教育培训行业收入
  • 企业违章行为
  • 评估增值资产如何记账
  • 个体户升一般纳税人分红怎么交税
  • 差额征收单位所需材料
  • php到底是什么
  • 无人蹭网 网络还不好
  • php随机函数是什么
  • wordpress建网站详细教程
  • ajax与php交互
  • php锁定文本
  • 社保调整基数后 两个月没变化
  • 老生常谈的常是什么意思
  • python抓取淘宝店铺商品
  • 所得税季报本月数是指
  • 低代码开发开源
  • 企业取得交易性金融资产时
  • react roter
  • ai形成生成器工具怎么用
  • elinks --dump
  • 帝国cms功能
  • 企业如何利用期货对冲风险怎么操作
  • 什么是应收账款信用管理制度
  • 往来款会计
  • python中dataframe的布尔过滤
  • 织梦栏目描述调用
  • PostgreSQL教程(二):模式Schema详解
  • 酌量性固定成本是指
  • 会计需要装订资料有哪些
  • mysql 随机取出一条
  • mysqlreport显示Com_中change_db占用比例高的问题的解决方法
  • c#调用excel
  • 金税四期监控什么
  • 增值税进项税销项税月末需要结转吗
  • 事业单位无形资产包括
  • 新股东入股的账务处理
  • 代扣的个人所得税怎么做分录
  • 银行三证合一是哪三证
  • 事业单位项目结算审计报告
  • 计提工会经费的会计分录
  • 对公付货款没有收到发票如何处理
  • 如何判断会计政策变更
  • 首次计提坏账准备应计入
  • 会议服务公司名称大全
  • mysql orch
  • 无法将此电脑升级到最新版本的windows10
  • 删除windows用户密码
  • Windows Server 2008域环境下组策略两例应用
  • 如何调整windows桌面图标大小
  • 在Windows Server 2012中,管理员默认的用户名是
  • perl编程
  • js原型继承和构造继承
  • 如何使用nodejs
  • scrapy爬虫教程
  • JavaScript replace(rgExp,fn)正则替换的用法
  • jquery修改字体
  • 源码讲解
  • 异地如何拨打12393
  • 上海ca证书税务的怎么开通
  • 境外个人税务备案登记表
  • 安徽省建筑施工企业排名
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设