位置: 编程技术 - 正文

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

  • 发票勾选错了已报税怎么办
  • 注册资本金实缴和认缴区别
  • 资产负债表中本期盈余等于什么?
  • 物流企业信用评级
  • 税务变更需要哪些材料
  • 服务业预收款项怎么确认收入
  • 结转本年度收入
  • 租赁房屋缴纳什么税
  • 增值税专用发票有效期是多长时间
  • 民非企业补贴收入要缴纳增值税会计分录怎么写?
  • 房租增值税专用发票和普通发票的税率
  • 个人所得税的申报税额是什么意思
  • 单位给员工交社保怎么交怎么计算
  • 发票可以作为原始凭证吗
  • 民间非营利组织会计制度最新版
  • 个人银行卡流水达到多少要交税
  • 销售原材料会计分录,款项已收
  • 企业押金怎么管理
  • 企业买断政策
  • 受托加工物资入库流程
  • win7步骤和详细教程
  • 债权转增资本公积账务处理
  • 劳务报酬纳税计算器
  • php面向对象详解
  • windows11如何关闭病毒和威胁防护
  • win10待机界面进不去系统怎么办
  • 共管账户和监管账户是一样的吗知乎
  • 公司转让股权交不交增值税
  • 农产品销售发票抵扣政策
  • ipad3性价比
  • 减值测试的资产有哪些
  • 应付职工薪酬资产还是负债
  • 税局 不负责任
  • 公司购买食品属于什么费用
  • 人力资源外包服务企业
  • mysql备份导入
  • 帝国cms到底好不好
  • 长期股权投资初始投资成本的确定
  • 旅行社的增值税税率
  • 费用报销做账分录
  • 建筑公司收到劳务发票会计分录
  • 资本公积的会计处理方法
  • 预算外的收入
  • 分公司向总公司申请拨款的请示
  • 以前年度损益调整怎么做账
  • 税收返还会计核算
  • 固定资产清理如何计算
  • 税务稽查补缴增值税税的账务处理流程
  • 旅游服务小规模差额税率
  • 计费销售额如何计税
  • 物流公司回扣几个点
  • 该卡已在其他账户中存在什么意思
  • windows进程数
  • 笔记本电脑bios更新
  • mac os 删除
  • linux文件后缀名解释
  • schedulerv2.exe - schedulerv2是什么进程 有什么用
  • win8找不到桌面
  • linux lvm2_member
  • 阿里云ecs keepalived
  • Android游戏开发读后感
  • linux awk命令使用实例
  • 跨域资源共享漏洞怎么修复
  • js中密码由字母和数字组成,长度为4-20
  • div +css
  • unity unit
  • hadoop有几个版本
  • python3并发
  • java中的锁机制
  • pyinstaller指定python2
  • node.js模块
  • flex开发工具
  • eclipse导入server
  • 浏览器判断手机品牌
  • 江西增值税发票查询
  • 广东省电子税务局官网登录入口
  • 河北新农合怎么查询
  • 企业年检里的纳税是什么
  • 税务局人事工作总结(税务局工作人员年度工作总结报告)
  • 税收是初次分配的手段
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设