位置: 编程技术 - 正文

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

  • 各行业的税负率表2022
  • 收到失业保险稳岗补贴会计分录
  • 金税四期查到了怎么办
  • 用友项目核算科目的项目不能为空
  • 盈余公积的作用与意义
  • 股票交易费用计算器
  • 简易征收如何入账
  • 房地产开发公司取名
  • 存款取款业务记入那个日记账?
  • 开出增值税发票没收到怎么抵扣进项税?
  • 个税手续费返还计入哪个科目
  • 还在讨论“税务金四”上线?税务和银行要联手清查单位和个人账户了!
  • 华为股权激励制度
  • 文化建设事业费优惠政策
  • 小规模增值税本期免税额怎么计算
  • 一般企业的会计原始凭证有哪些类型
  • 收取滞纳金是行政处罚吗
  • 劳务挂靠需要开票吗
  • 工程分配协议书范本
  • win7系统没有桌面图标怎么办
  • 剑灵2.0win7
  • 所得税以前年度亏损
  • 电脑桌面换壁纸的软件
  • 微软 windows11
  • windows7使用方法
  • 收到业绩补偿会扣税吗
  • 结转已销售产品成本20000元
  • 老生常谈的常是什么意思
  • thinkphp配置文件
  • 微信小程序实现轮播图
  • echo输出语句
  • wordpress标签tag文章
  • 公司搞研发是什么意思
  • 资产负债表中应交税费为负数是什么意思
  • 税务局退还的三种税费
  • 成本核算需要哪些数据
  • 增值税发票红字发票未抵扣怎么开
  • 定金罚则可以约定吗
  • 销售费用福利费和管理费用福利费
  • 职工教育经费包括住宿费吗
  • 理财产品的分类
  • sql语句中单引号是什么
  • sqlserver2008不存在或拒绝访问怎么办
  • 税务安全证书应用客户端不成功是什么意思
  • 如何搞公司
  • 可以以公司名义贷款吗
  • 应付账款的余额表示什么
  • 印花税不足一元免征吗
  • 土地补偿费怎么算
  • 营改增后房地产企业如何开票
  • 租房免租是什么意思
  • 坏账准备计提的方法和比例
  • 筹建期费用账务处理
  • 注册资金多少对公司有什么影响
  • 投资其他公司做什么科目
  • 给个体工商户付款可以打到法人卡上吗
  • 以前年度应收账款少记怎么处理
  • 五证合一的办理流程是什么
  • 什么是来料加工和进料加工
  • sqlserver2000数据库安装教程
  • vc运行程序exe停止工作怎么办
  • win8defender怎么打开
  • linux的收获
  • ie的进程
  • windows8快速启动设置
  • linux内核2.3.20
  • win7右键没有
  • window10如何修改电脑名称
  • win8系统怎么重新安装系统
  • scikit-learn svr
  • jquery如何赋值
  • jquery tagname
  • js去除hover样式
  • 在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信
  • ubuntu没有xauthority
  • android开发前景
  • jquery中选择器分为哪三种
  • 广州市税务局官网电话
  • 厦门地税电话客服电话
  • 南通五险一金最低比例
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设