位置: 编程技术 - 正文

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

  • 固定资产安装费用怎么处理
  • 利息收入需要缴纳企业所得税吗
  • 一般纳税人购销印花税减半吗
  • 增值税优惠政策3%降1%
  • 小规模商贸公司没有进项可以开发票吗?
  • 其他应交款入哪个科目
  • 工程基建期的工作总结
  • 别人的项目挂靠我公司怎么做账?
  • 建筑企业差额征收
  • 企业税收扣除标准
  • 冠名发票申请要求有哪些?
  • 购物卡开预付卡有风险吗
  • 可转债税前收益和税后收益
  • 可供出售金融资产是指什么
  • 土地使用税每个月都要计提吗
  • 暂估运费成本的账务处理
  • 税务公司属于什么性质
  • 怎么查银行账户余额
  • 住宿费进哪个科目
  • 小规模企业出口可以不报关吗
  • 外卖收入增值税怎么算
  • 用U盘安装苹果系统
  • Win7/Win8/Win10单、多系统一键安装教程 只需30秒!
  • 委托检验报告能否作为处罚依据
  • 银行手续费填在汇算清缴的哪个表
  • 房产税有哪些种类
  • php 反射 性能
  • 羊毛衫变形了还能变回来吗
  • 财政补助收入核算内容
  • php get post
  • 000.exe病毒
  • php变量底层实现
  • 贷款减值损失准备怎么算
  • 公司注销未分配利润会计分录
  • promise thenable
  • springboot jni
  • 技术部周报怎么写
  • 发票 加工费
  • 固定资产月末怎么结转
  • 网上学电脑的软件
  • 税负率一般控制什么
  • js正数转负数
  • 在ubuntu中安装win10
  • 13%和17%税率
  • 改签机票要收费
  • 申报的财务报表在哪里查询
  • 装修款需要开发票吗
  • 营业收入是指从全部营业收入中扣除
  • 税盘连接服务器失败
  • 资本公积的相关资料
  • 认缴的实收资本需要做账吗?
  • 生产成本一般采用
  • 运费发票没到可以先计提吗
  • 物业管理公司如何应用节能新技术
  • 房屋装修支出怎么做账
  • mysql 5.7 8.0
  • mysql8高可用
  • 详解标准mysql(x64) Windows版安装过程
  • sql注入式攻击中单引号的作用
  • 该怎么配置
  • win8系统打不开设置
  • windows vista 版本
  • 服务器维护和计划的区别
  • ssms.exe是什么进程
  • kdeskcore.exe是什么
  • Linux Mint 5 XFCE Community Edition RC1 (BETA 025) 本月17日开始发布
  • windowsxp 32位
  • centos默认字体
  • 苹果发布新机老款能降多少
  • win10系统office2007每次打开都要配置
  • 放一个命令
  • win10不停的自动重启
  • unity unity3d
  • unity best fit
  • nodejs为什么性能这么好
  • jquery根据name
  • 国家税务局级别排名
  • 国家税务发票查验平台手机怎么查
  • 漯河经济开发区税务局电话
  • 环保税2018年开征文件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设