位置: 编程技术 - 正文

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

  • 进项税转出的会计凭证
  • 已知税金及附加怎么算增值税
  • 纳税属于什么会计科目
  • 所得税五个年度怎么算
  • 申报纳税的意思
  • 储值卡金额算什么科目
  • 上月开票这月退票要红冲吗?
  • 大行建筑有限公司分公司
  • 管理费用和研发费用的区别
  • 业务提成模版
  • 测试费明细
  • 政府减免税款如何账务处理
  • 银行手续费发票图片
  • 企业所得税准予扣除
  • 成本会计实训要求
  • 委托加工环节原材料收消费税吗
  • 增值税发票丢了怎么补开
  • 上个月未抵扣忘记做进项会计分录
  • 收就业局稳岗补贴做账
  • 交房租对方开发票怎么开
  • 没有收到发票的支出可以做成本吗
  • 城市生活垃圾处理费应该交吗
  • 财税〔2017〕39号
  • 资本公积盈余公积区别
  • 如何开锅
  • 金税盘基本信息设置
  • 王者荣耀干将莫邪技能
  • 货币资金资产处置损益表如何填
  • 在电脑中设置一键换机
  • PHP:apache_response_headers()的用法_Apache函数
  • 影响安全库存的因素包括
  • laravel 5.4中实现无限级分类的方法示例
  • 房地产消防工程入什么科目
  • 解决脱发的8个方法
  • 专票抵扣联可以盖两个章吗
  • 结转制造费用的账务处理
  • 微信支付开发包
  • 图像的分类方法及具体的分类
  • thinkphp教程
  • php 个人博客 源代码 简单
  • 前期认证相符
  • 新公司有免税政策吗
  • 冲掉应收账款
  • 库存商品是什么会计要素
  • 外请专家讲课费如何交税
  • 进销存表格模板明细账
  • 会计怎样审核报销凭证
  • 建筑业用的会计账簿
  • 负数发票是可以抵扣吗
  • sqlserver2012无法新建表
  • 无票收入会计分录实例
  • 实习生个人所得税需要申报吗?
  • 处理报废的固定资产账务处理
  • 衍生工具属于什么科目
  • 出纳建账的基本流程
  • 账簿的概念与分类
  • window7 32位系统
  • win8系统怎样
  • mac系统怎么创建文件
  • win8管理工具在哪里
  • centos下安装gcc
  • win7小键盘怎么调出
  • win8怎么关闭管理员用户
  • win10播放视频的软件
  • windows7的开机启动项在哪里
  • 数字小键盘不管用
  • linux的web服务器
  • 实例讲解命局与大运流年作用
  • jquery 瀑布流
  • node.js教程详细
  • js怎样删除数组中的某个值
  • javascript要怎么学
  • javascript基础入门教程
  • 置顶是怎么弄的
  • python 函数 星号参数
  • python中的异常处理有哪些
  • android获取sha1
  • 异地车如何查车主信息
  • 个体户是否需要缴纳企业所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设