位置: 编程技术 - 正文

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

  • 小规模纳税人销售农产品税率是多少
  • 劳务公司计税税率
  • 汇兑记载事项及使用注意事项
  • 营业执照注销对商标有影响吗
  • 车险 保险金额
  • 交易性金融资产属于什么科目
  • 委托贷款利息如何计算
  • 什么企业可以享受加计抵减
  • 退货手续费账务怎么处理
  • 提供有形动产租赁服务适用税率为13%
  • 物流公司 报关
  • 高温补贴领取
  • 银行理财产品赎回
  • 购买的包装物用什么消毒
  • 财产租赁合同金额含税吗
  • 纳税人提供不动产租赁服务采取预收款方式
  • 劳务费备注差额征税是什么意思呢?
  • 季度营业额超过6万需要补税
  • 实收资本里的钱怎么做账
  • 公司注销留抵税金能退税吗
  • 当期应提取的坏账准备金
  • 母子公司之间支付的租赁费可以税前扣除么
  • 合同负债属于什么费用
  • 2019附加税优惠政策
  • 开通电子税务局需要什么资料
  • 非正常损失怎么处理
  • 进货折让会计分录
  • linux aws是什么
  • windows更新出现错误重新打开设置
  • 如何彻底关闭电脑右下角弹窗
  • 收到上级工会下拨的工会经费
  • 上月暂估成本高了这个月怎么做账
  • win10电脑时间改了又跳回去
  • 注销税务时其他应付款的账务处理
  • Linux系统怎么配置IP
  • element-ui表格
  • mongodb4.0安装教程
  • 机动车发票金额含税吗
  • 金融商品转让业务包括
  • 一般纳税人在什么情况下,不可以开具增值税专用发票
  • 累计摊销属于什么类科目
  • 基于stm32的小游戏
  • h5支付功能
  • audit install success
  • quota命令 显示磁盘已使用的空间与限制
  • vim8.2插件
  • 期末结转会计分录模板
  • 房产税的租金收入按什么计算的
  • php框架 hyperf
  • python多线程处理excel
  • php网站访问量大怎么优化
  • 帝国cms怎么调用文章随机段落
  • 购买项目用设备计入什么科目
  • 差旅费报销注意哪些问题
  • 非营利组织接受捐赠收入要交企业所得税吗
  • 不确认销售收入的原因
  • 房产评估增值是什么意思
  • 已经抵扣进项税转出怎么做分录?
  • 应交税金减免税科目
  • sqlserver表死锁
  • mysqldumpslow
  • win10使用期限
  • mac系统播放器声音小
  • securecrt教程
  • xp操作系统入门
  • 文件在移动或复制过程中权限的变化
  • 安装windows 8.1
  • WIN10开始菜单点不动
  • win7 netplwiz
  • cocos2dx 4.0
  • cocos2d怎么用
  • jquery删除dom
  • AddForceAtPosition方法:增加刚体点作用力
  • jquery.js插件
  • python的threadpool
  • recyclerview stableid
  • 河南省地税网上营业厅
  • 江苏发票真伪查询
  • 冻结银行账户属于什么
  • 资源税是地方税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设