位置: 编程技术 - 正文

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

  • 提前报废的设备
  • 土地税房产税会计分录
  • 自然人独资交企业所得税吗
  • 专票过期了
  • 工资3700扣多少社保钱
  • 贴现的日期怎么算
  • 五险一金计提缴纳分录
  • 委托加工什么时候代收代缴消费税
  • 建筑施工企业质量体系环境包括
  • 以资抵债是利空还是利好
  • 购进材料无发票会计分录
  • 高原补贴算工资吗
  • 企业里工会
  • 用于研发的设备如何折旧
  • 享受小型微利企业标准
  • 内帐应收应付款坏账年末怎么处理?
  • windows 发布时间
  • 日用品做账时放什么东西
  • 安全的无线连接软件
  • 映泰主板系统重装
  • 固态被锁了
  • 季度所得税缴纳时间规定
  • windows 搜索工具
  • 如何在excel中计算两列数值的差
  • PHP:mb_strtoupper()的用法_mbstring函数
  • macos10.15.7
  • 松木山在哪
  • PHP:mb_http_output()的用法_mbstring函数
  • 什么是包装物押运
  • 公司收到个人汇款怎么办
  • 材料入库款项未付会计分录
  • 结转本月收入类账户到本年利润
  • thinkphp assign函数
  • 利润分配怎样做分录
  • 主营业务收入借贷方向
  • 猿类作文
  • php5魔术方法
  • python random random
  • 成本法变为权益法合并层面计算投资收益
  • 税负率怎么计算举例子
  • 会计分录什么时候写主营业务收入
  • linux怎么创建python文件
  • mongodb数据库操作题
  • 生产成本明细账t型账
  • 增值税专用发票上注明的价款含税吗
  • 股东权益合计是所有者权益总和么
  • 住宿费用抵扣税款会计分录
  • 出售固定资产计入营业外收入
  • 外贸公司美金账户开立要求
  • 挂靠建筑公司企业所得税怎么交?
  • 公司年底奖金怎么计算
  • 交租金没有发票怎么办
  • 亏损弥补的新旧不同
  • 分批法成本核算对象
  • 搭赠商品如何开票
  • sql server字段
  • mysql 5.7.18 winx64安装配置方法图文教程
  • windows启动失败是怎么回事
  • vmware虚拟机怎么卸载不了
  • window10 左下角
  • centos安装完为什么没有桌面
  • win7系统摄像头不可用怎么办
  • WIN10系统安装EXCEL打开会报警
  • win7无法识别usb设备怎么办 五大方法来解决
  • 电脑arp攻击怎么解决
  • win7如何显示桌面
  • jquery 使用
  • 谈谈对环境保护认识话题三分钟
  • node.js gui
  • 安卓沉浸式状态栏框架
  • python 初级
  • 安卓系统休眠设置在哪
  • Intermediate Unity 3D for iOS: Part 3/3
  • java轻松学
  • 用nodejs实现三个类,动物基础类(有跑的函数,吃的函数)
  • 怎么用python播放音乐
  • 商业发票发票号怎么填写
  • 小规模纳税人专票开1%还是3%
  • 12366纳税服务热线的接通率
  • 记账凭证编制的依据可以用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设