位置: 编程技术 - 正文

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生成证书图片)

  • 资本公积转增资本会引起什么变化
  • 讲课费怎么代扣代缴个人所得税
  • 按差额缴纳增值税
  • 投标保证金利息计算起止时间
  • 金税盘业务
  • 水利建设基金可以按次申报吗
  • 新办企业能否享受留抵退税
  • 什么叫复式记账凭证
  • 进口增值税的计税价格为
  • 长期借款业务的思维导图
  • 安全费用提取使用管理办法2022 136
  • 汇算清缴预提费用调整政策
  • 集团子公司之间调拨固定资产
  • 公司厂房拆迁要交税吗
  • 材料存货的期末计量有何特点
  • 别人的项目挂靠我公司怎么做账?
  • 电子营业执照可以开通抖音小店吗
  • 农业生产免税政策
  • 增值税电子发票没有发票专用章
  • 固定资产弃置费用预计负债
  • 如何查询所属税务所
  • 公司开13个点增值税交多少钱
  • 销售残次品怎么处罚
  • 交割单和对账单一样吗
  • 山毛榉树林里的草叫什么
  • linux xmrig
  • win7纯净版系统之家
  • thinkphp多模块
  • 企业年金税前扣除比例
  • 解决本地浏览器的方法
  • 同业拆入属于哪个行业
  • 月底资产负债表不平怎么找原因
  • opencv项目开发实战
  • 购入固定资产预付款怎么做账
  • 发票跨月发现开错该怎么办?
  • 善意取得虚开发票罪认定
  • 印花税怎么交税率是多少
  • 资产减值损失应在计算()时扣除
  • 应收账款可以挂存货吗
  • 现金日记账应采用的格式为订本式
  • 陕西省跨区域企业所得税征收
  • 工会经费是应付职工福利还是管理费用
  • 现金流量表的编制基础是权责发生制
  • 为什么留存收益不考虑筹资费用
  • 残保金在网上怎么申报
  • 注册表修改数据
  • 宏基aspire s3适用固态硬盘
  • 清华同方bios通用密码(thtfpc)
  • win7宽带自动拨号设置
  • virtualbox虚拟机
  • azipmd5.exe是什么
  • win7能不能安装vs2019
  • regsync.exe - regsync是什么进程 有什么用
  • ControlSet001、ControlSet002以及CurrentControlSet之间有什么区别
  • win7系统升级win8
  • linux 常用命令大全及其详解
  • centos8安装锐速
  • win8系统谷歌浏览器打不开
  • centos ssh升级
  • win10系统如何设置不休眠
  • WIN10系统优化精简工具
  • 如何在linux系统中卸载一个已装载的文件系统
  • [置顶]津鱼.我爱你
  • javascript之Array 数组对象详解
  • 新闻客户端app
  • css弹出层
  • shell脚本中如何交互传参
  • jquery遍历radio并选中
  • install ubuntu kylin
  • os模块 python
  • python并发和并行
  • unity loom插件
  • 控制游戏类型
  • python命令行在哪
  • 销售农药化肥的经营范围
  • 宁夏地税局局长
  • 加工修理修配统称为什么
  • 江西省税务局公众号
  • 普通发票每个月有限制吗
  • 深圳机打发票查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设