位置: 编程技术 - 正文

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

  • 半成品可以计入成本吗
  • 国企的注册资本也很少吗
  • 收到所得税退税怎么做账务处理
  • 资本公积可以随时撤出来吗
  • 成品油购进数据未同步怎么办
  • 企业收到的土地补偿款的企业所得税
  • 复合肥生产企业排名
  • 超市里的摊位租金贵吗
  • 办理产权证费用明细
  • 资产减值损失管理措施
  • 房屋租赁可以开住宿费吗
  • 分公司亏损总公司账务处理
  • 外贸过程中产生的问题
  • 地税都包括什么
  • 报价表含税点是什么意思?
  • 航空公司按照一次性收费
  • 旅游业开办费
  • 失业保险退保怎么返
  • 领用工程物资用于在建工程的进项税抵扣问题
  • 收到免税苗木发票怎么做账
  • 面粉厂怎样做帐,税率是多少?
  • 小规模税率还是1%吗
  • 企业清算期间账务怎么做
  • 利息调整摊销的经济意义
  • 如何玩转win11
  • 怎么做增值税
  • 应付职工薪酬转入管理费用
  • 服务业公司取得的成果
  • Windows10开始菜单透明
  • 开增值税专用发票必须走公账吗
  • PHP:oci_field_type_raw()的用法_Oracle函数
  • vue trim
  • 最小巧的单反相机
  • 企业职工教育培训
  • 蔚蓝色的海王星是什么歌
  • 质保金 销售费用
  • 新政府会计制度固定资产核算
  • uniapp新建项目
  • js如何转换为数值型
  • jquery获取值的几种方法
  • 简述资产负债表债务法
  • 网络销售税率怎么算
  • phpcms默认密码
  • 开票一定要确认发票吗
  • 公允价值变动损益
  • System.Data.SQLite 数据库详细介绍
  • 比赛奖金怎么做账
  • 在与sqlserver建立连接时出现
  • 现代服务税目包括哪些具体分类
  • 个人代人开普票个税怎么算
  • 税法规定的增值税是指
  • 施工企业暂估成本
  • 注销时其他应付款怎么冲平
  • 小企业汇算清缴补税会计分录
  • 收到党建工作经费的通知
  • 物资采购是
  • 中标单位支付代理费
  • 业务招待费可以开专票抵扣吗
  • 购入一辆运输汽车,价值5.6万元,款项尚未支付
  • 内帐外帐的区别与联系
  • 支票为什么不能取钱
  • 问答:分支机构是否需要设立账簿
  • 商业企业会计制度变迁论文
  • 腾讯云centos7有界面吗
  • 应用商店windows
  • win8系统截图工具快捷键
  • Win10 TH2首个重要更新后应用商店依然存在问题
  • linux查看指定内容
  • Win10 Redstone版Build 14251现身 正式版将在7月份发布
  • cocos 2d x
  • javascript中的继承
  • nodejs word
  • js array insert
  • jquery.validate提示错误信息位置方法
  • 每天一篇文章锻炼口才的文章
  • python中lxml模块
  • 成都税务局网上办事大厅
  • 税务总局2017年11号公告第二条
  • 个人所得税怎么申报
  • 劳务报酬预缴税率表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设