位置: 编程技术 - 正文

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

  • 个税申报吗
  • 法律会计审计咨询合同需要缴纳印花税吗
  • 福建国税网上办税平台登录
  • 出售固定资产不开票可以吗
  • 原材料的入账价值包括保险费吗
  • 个人动产租赁税费怎么算
  • 天猫国际的店铺是正品吗 感觉很便宜
  • 公司给非员工代缴社保合法吗
  • 小规模跨年发票可以入账吗
  • 什么企业没有销售费用
  • 费用没有发票是什么意思
  • 年终奖不走工资走存单,需要缴税吗?
  • 样机销售是什么意思
  • 进口关税发票账务处理如何进行?
  • 建筑安装税务分类编码为多少?
  • 前期差错更正处理方法
  • 营改增金融业税收政策
  • 国税局预缴税款在哪里看
  • 销项负数票需要把之前的票退回吗
  • 个人借款利息收入增值税税率
  • 哪些税计入原材料费用
  • 什么叫保理支付
  • 京东白条账单制和订单制是什么样的
  • 对某公司的了解
  • 重复确认收入是什么意思
  • 公司购买车怎么做
  • php数组可以使用哪些键名
  • 购入无形资产会计处理
  • 土地增值税案例题库
  • php 装饰器
  • 房产税是什么意思,简单的回答
  • 工会经费可以提出来使用吗
  • 漫天花雨异闻
  • 变量与数据
  • 端午节过节费发放通知
  • 未缴纳的出资款怎样清算
  • 异地预缴的附加税在申报税时会抵消掉么
  • 用于职工福利的进项税账务处理
  • python字符串如何换行
  • 上传附报资料是哪些资料
  • 建筑施工企业适用什么会计制度
  • 股权激励税务处理方案
  • access的使用教程
  • 长期待摊销费用属于
  • 公司租赁个人车辆租金多少合适
  • 固定资产抵扣进项税额最新规定
  • 收到股东投资如何做账
  • 小规模纳税人销售货物税率是多少
  • 定额发票和增值税普通发票的区别
  • 集团公司对子公司总经理的绩效考核
  • 未达起征点可以申请一次性创业补贴吗
  • 资产减值损失结转到本年利润吗
  • 净资产总计等于什么
  • 结账时怎样根据日期填写
  • 445端口 关闭
  • 获取mac命令
  • win8最多支持多大内存
  • 如何安装和卸载抖音软件
  • macbookzen
  • win8屏幕键盘快捷键
  • win7系统自带游戏在哪
  • office进程
  • windows10x预览版
  • centos6.5怎么安装
  • edge新版浏览器
  • win7系统64位安装打印机的方法
  • linux进程运行的两种方式
  • java.基础
  • python 获取网页上文件地址
  • unity官方插件
  • js行号显示的文字不一样
  • vr project
  • 在jquery中使用什么方法获取和设置属性
  • python pil gif
  • jqgrid tree
  • 宁波镇海哪里可以赶海
  • 税务系统福利
  • 内蒙古电子税务局开票流程
  • 讲话和讲话精神的区别
  • 输入税控盘密码是填证书口令吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设