位置: 编程技术 - 正文

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

  • 什么是差额税金
  • 建筑企业预交的附加税怎么办
  • 处置固定资产产生的净损失
  • 金蝶打印凭证页码范围
  • 职工福利费会计核算
  • 机票退票账务处理
  • 多计提以前年度损益调整账务处理怎么做
  • 以前年度多计成本,本年度冲减成本
  • 其他业务活动包括
  • 公司法人要交什么税
  • 资产负债表年初余额是不是一直不变
  • 专利申请费用怎么做账
  • 案例分析关于团员青年的思想困惑疏导和成长问题释疑
  • 会计对帐是银行账户吗
  • 记账凭证按照填列方式的分类包括
  • 公司工会发给职工的福利
  • 领用工程物资用于在建工程的进项税抵扣问题
  • 金蝶结转损益后怎么进下一期
  • 购买方开具红字信息表
  • 企业自然人电子税务局怎么申报
  • mac系统的桌面
  • 社保增加人员网上申报
  • 收到其他公司的罚款会计分录
  • 小微企业可以享受六税两费吗
  • php常见面试问题
  • linux怎么更改账户名
  • windows11怎么查询激活时间
  • 出口押汇算贷款吗
  • 销售退回的会计分录金额
  • 详解php字符串替换
  • php生成随机字母数字代码
  • php zmq
  • react组件constructor
  • 企业纳税人识别号是什么
  • 机动车组织机构代码证更改
  • 异地预交个人所得税
  • 开票软件怎样
  • 无退税产品出口征税
  • 股权转让过程中的税费
  • sql2005sp4
  • 采用汇兑的方式归还前欠货款
  • 进口原料需要交哪些税
  • 购买汽车的工本费如何入账
  • 收回应收账款账面余额
  • 退货属于什么物流
  • 银行询证函费用发票
  • 今年缴纳上年的税收滞纳金
  • 洗浴发票可以报销么
  • 哪些税费计入税金及附加科目
  • 银行退票业务
  • mysql日期和时间函数
  • windows7软件运行没反应
  • bp程序是什么意思
  • win8 怎么样
  • 在苹果电脑mac上怎么下载
  • windows10虚拟桌面
  • mac 怎么复制文件
  • win8.1技巧
  • window8设置在哪里
  • 手把手教你在家制作豆腐脑
  • javascript基础
  • Javascript之Number对象介绍
  • android2d游戏开发
  • 深入了解的高级表达
  • bat批处理if命令
  • 详解node HTTP请求客户端 - Request
  • Android使用教程
  • jquery属性操作
  • php开机启动
  • unity火堆
  • PYTHON使用缩进来体现代码之间的逻辑关系
  • android:fragment
  • 安卓开发常见问题
  • 国家税务总局2012年20号公告
  • 江苏国家税务局电子税务局
  • 深圳市国税局副局长是谁
  • 安徽中考2021年
  • 销售哪些产品需办许可证
  • 广东房产契税电话查询
  • 广东佛山税务局人工电话是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设