位置: 编程技术 - 正文

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

  • 会计报税
  • 翻唱歌曲发行时怎么把原唱名字改了
  • 视同销售收入是纳税调整项目吗
  • 男的交社保有什么好处
  • 申报个税需要扣除公积金和社保吗
  • 小规模纳税人申报时间
  • 在分公司签的合同能转到总公司吗
  • 企业递延所得税费用的计算公式
  • 银行回单可以做收入吗
  • 价外补贴需要交增值税吗
  • 广告费怎么入账
  • 如果当月有未记账的凭证,系统不可以结账
  • 小规模企业跨季报税流程
  • 代扣代缴税种有几个
  • 增值税抵扣主要用于哪些税收?
  • 利息收入要不要交增值税?
  • 航空运输的湿租业务按什么缴纳增值税
  • 印花税征税范围包括所有合同
  • 出口样品可以申请专票吗
  • 劳务费按次500元
  • 申报是不是就是报税
  • 开票方开错发票
  • 年终奖扣税标准计算器
  • 玩穿越火线总是提示机器遇到
  • 批量获取文件信息
  • 在途物资退货会退款吗
  • 住房公积金会扣税吗
  • 离职补偿金如何缴纳个人所得税?
  • 公租房租金收入免企业所得税吗
  • php设计思路
  • mmtraylsi.exe是什么进程 有什么作用 mmtraylsi进程查询
  • 补缴税款计入什么科目
  • 向农户收购农产品怎么打款
  • 利用php判断是否为素数
  • 以固定资产投资的会计处理
  • 旧设备换新设备会计分录
  • 注销报税是什么意思
  • php收发邮件
  • php上传图片并显示
  • 增值税留抵税额可以结转下一年吗
  • stat 命令
  • 中标费用入什么科目
  • 旅行社差额征税政策
  • 数据库管理中负责数据模式定义的数据库语言是
  • 我想问一下移动
  • 内账收入和成本怎样做
  • 应收账款逾期无法偿还
  • 税控盘使用费
  • 什么叫生活补助
  • 固定资产清理时增值税怎么处理
  • 专用发票红冲有时间限制吗
  • 服务业小规模纳税人全套做账
  • 营改增进程
  • 车辆购置税计入什么科目
  • 原材料用于在建工程进项税可以抵扣吗
  • 我国税收税类中的流转税
  • 税控盘全额抵减如何填写申报表
  • 有留抵税额可以红冲吗
  • 如何确定费用归属哪个部门
  • 承兑汇票需要做账吗
  • 付款凭证怎么写样本
  • 对公受托理财申购怎么写
  • sql的数据操作
  • 硬盘安装windows11
  • centos6.9开启ssh服务
  • u盘怎么安装驱动程序
  • 华硕主板如何刷系统
  • 怎么查看自己mac电脑有没有被人使用过
  • vue eventhub
  • linux中使用bash是什么意思
  • 防止sql注入php
  • js新开一个窗口
  • shell读取文本
  • python的设置
  • javascripr
  • 广东电子税务局手机版
  • 三亚国税局各区领导班子
  • 河南二套房契税征收2023标准是多少
  • 个税汇算清缴申报方式选哪个
  • 土地整理费用由谁承担
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设