位置: 编程技术 - 正文

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

  • 事业单位固定资产计提折旧是当月还是次月
  • 固定资产怎么确定是否减值
  • 税金及附加现金流指定
  • 企业违约金收入会计分录
  • pos机手续费开什么发票啊
  • 电子记账软件出纳帐
  • 半成品算原材料吗
  • 铁路大票抵扣几个点
  • 销售多余材料会计分录怎么做
  • 农产品增值税抵扣新政策2021
  • 外出经营预缴税款,回所在地如何申报
  • 计提费用的时候可以计提税金吗
  • 应交税费不核算
  • 劳务外包公司代发工资能正常发吗
  • 如何检验发票真伪
  • 委托加工白酒的计税依据
  • 多缴税款如何办理退税
  • 发票代码会有一样的吗
  • 转让无形资产税目征收营业税的是
  • 公司之间银行往来款怎么做账
  • 收到退还的工会经费进什么科目
  • win10 kb5005611
  • win10 删除文件 没有找到项目
  • 税法中的视同行为如何开具发票
  • 小企业原材料包括
  • 无法设置系统更新的原因
  • 数字证书认证系统
  • php5.4+mysql
  • 一般纳税人企业注销流程
  • uniapp页面loading
  • 索尼体积最小的微单
  • php与js交互
  • 高新技术企业研发费用占比要求
  • 公司收到投资款怎么写收据?
  • 网络安全文章1000字
  • 检测命令
  • 以股权换股权税务问题
  • js array.fill
  • dev怎么保存项目
  • 交易性金融资产入账价值怎么计算
  • 以前年度损益调整属于哪类科目
  • 现金流量表的本期数是本月数还是本年数
  • sql乘函数
  • 开增值税发票规格是否可以不用填?
  • 工地扬尘检测仪图片
  • 委托代理出口如何缴纳增值税
  • 车船税怎么计账
  • 应扣未扣税款对纳税人的处理
  • 进项转出的原因是什么
  • 企业给加盟店的钱怎么算
  • 老板想提取销售怎么办
  • 购销农副产品需要交税吗
  • 企业控股情况怎么看
  • 报关单新版
  • 如何开具发票?
  • 怎样才能制作出白瓷
  • 企业会计做账教程
  • 非营利医疗机构免征哪几种税
  • linux 查看numa
  • 行转列sql函数
  • 播放器状态
  • ubuntu服务
  • centos的命令行界面输入
  • 虚拟主机管理平台
  • centos云服务器
  • 网站遇到错误号怎么办
  • 电脑跳出windows 许可
  • win7还原电脑系统的步骤
  • unity xcode
  • unity sp
  • js 拍照
  • node优秀库
  • JavaScript split()使用方法与示例
  • 在jquery中使用什么方法获取和设置属性
  • python基本介绍
  • 河南洛阳医疗保险电话
  • 企业所得税年报职工薪酬纳税调整明细表
  • 国税地税发票编码查询
  • 甘肃省国家税务局电子税务局
  • 为什么专利转让要交税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设