位置: 编程技术 - 正文

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

  • 从香港向境外汇款怎么汇
  • 公司处理固定资产的账务处理
  • 土地增值税应纳税额如何计算
  • 股票交易印花税降低
  • 预交所得税利润表怎么填
  • 一般纳税人增值税申报操作流程
  • 410768金税盘
  • 个人股权转让协议书范本合同
  • 国家高新补助款多久到账
  • 已经认证的进项税转出
  • 堤围内的土地性质
  • 年末增值税结转账务处理流程
  • 出口发票税率为0还能退税吗
  • 贸易公司出口退税流程及账务处理
  • 转让股权应具备什么条件
  • 置换补贴款
  • 生产性生物资产计提折旧的方法
  • 产值等于营业额吗
  • 退车辆保险费如何计算
  • 视同销售有哪些?
  • 销售人员报销差旅费怎么报税
  • 购买半成品计入什么科目
  • 电脑管家系统异常要修复吗
  • 网络安全与安全教育内容
  • 文件夹共享设置权限
  • mac如何关闭开机启动
  • 劳动保护费计入什么会计科目
  • 汇算清缴期结束后
  • conda配置虚拟环境
  • php判断文件类型
  • 哪些服务可以开具经纪代理服务发票
  • 图书免税?
  • 个人向公司借款协议书范本
  • 外币应收账款汇兑损失计入
  • 异地预缴印花税怎么做账
  • 有外币账户的企业叫什么
  • html 基础
  • 保税区商品可以开发票吗
  • 未分配利润处理顺序
  • 发给客户免费的短信
  • 出口退税的会计处理
  • 当月销售下月开票
  • 未按期预缴企业社保
  • 短期理财收益账务分录
  • 水电费收据能证明什么??
  • 公司购入二手车没有发票怎么入账
  • 以前年度调整要更正申报吗
  • 会计账簿的启用与登记实验报告
  • mysql 大数据处理
  • 如何设置谷歌搜索
  • microsoft window vista
  • WFXMOD32.EXE - WFXMOD32是什么进程
  • 桌面管理在哪里打开
  • linux系统init命令
  • Centos 6.4 64位版命令行下设置无线网卡教程
  • win7一直配置
  • win7 注册表 ahci
  • win8怎么系统重装系统
  • 禁用强制驱动程序签名有什么用
  • free怎么使用
  • shell source不起作用
  • cocos2dx 教程
  • unity4.1
  • perl删除文件夹
  • html&js+前端
  • xml文件示例
  • 文本框几种常用属性
  • Android Studio Attach source code
  • 修改bash_profile
  • NGUI之UIRoot
  • shell脚本ll
  • python计算文件大小
  • 工具类别怎么填写
  • Android GridView属性集合
  • JavaScript Math.round() 方法
  • javascript面向对象精要
  • js中如何在div里写入内容
  • 企业信息公示在哪里打印
  • 通用定额发票分经营类型吗
  • 加油发票如何抵扣
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设