位置: 编程技术 - 正文

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

  • 刚打完发票可以注销税控盘吗
  • 申报个体经营所得税时营业外收入怎么填
  • 初级农产品免税原理
  • 增值税的免税项目有哪些
  • 计提固定资产折旧会计凭证
  • 企业外币账户开户流程
  • 事务所纳税
  • 人工费用包括哪些科目
  • 房地产行业企业所得税政策
  • 出口货物发生退运是征税还是免税
  • 计提固定资产折旧,车间使用的固定资产折旧1400
  • 发票上的专用章没盖清楚,可以在票面其他空白处补盖吗
  • 基金会计核算的核算主体是
  • 收到社保局生育津贴
  • 工资退回怎么处理
  • 印花税注册资本缴税时间
  • 一般户可以收货款么
  • 承兑汇票章不清晰 情况说明
  • 营改增后哪些费用可以抵扣
  • 公司之间借款收据要领导签字吗
  • 外籍人员探亲签证
  • 支付工程款会计处理
  • 小企业成本核算方法移动加权平均法
  • 公司收到利息怎么记账
  • 如何安装u盘的系统
  • 厂商退货款差额怎么算
  • nicconfigsvc.exe - nicconfigsvc是什么进程 有什么用
  • 分期收款销售商品纳税义务发生时间
  • 继承税遗产税新政策
  • 如何补办二手车牌照
  • 定额发票怎么查询经营范围
  • 自建办公楼装修效果图
  • 接受捐赠的增值税要交企业所得税吗
  • 宋大叔教音乐第三单元进阶版
  • 私企固定资产管理办法
  • phpcms模块
  • discuz安装使用教程
  • 租房开的发票收的税怎么做账?
  • 其他应收款抵货款怎么记账
  • 资产减值损失账户核算内容
  • 在sqlserver2008中
  • mysql5.7.27安装与配置
  • SQLite3 命令行操作指南
  • 本月损益类未结转为零的一级科目6603
  • 技术服务收入属于什么收入
  • 暂估入账的原材料有成本差异吗
  • 最新外资企业法实施条例
  • 直接材料成本总差异怎么算
  • 所得税减免的会计科目
  • 公司名下汽车过户个人需要补税吗
  • 公司员工报销没有发票挂内账有风险吗
  • 临时售楼部招牌效果图
  • 政府奖励金怎么发放
  • 开办费的最新账务处理2021
  • 建筑行业挂靠代扣税款如何入账?
  • 固定资产多入账怎么写情况说明
  • 银行业务冲正
  • 网上购物退货后钱多久到
  • 印花税多久申报一次2023
  • 什么叫系统服务
  • sql多级汇总
  • win10怎么预览文件
  • linux获取主目录的命令
  • ubuntu搭建go环境
  • 不知道,不知道
  • win10桌面右边没有了怎么弄出来了?
  • linux wc-w
  • 用linux配置ftp服务器的过程
  • opengl 生成图片
  • javascript ()
  • android打包原理
  • 关于中国天气的新闻报道
  • javascript SpiderMonkey中的函数序列化如何进行
  • 范冰冰魔范学院杂志可爱公主风
  • jq easyui
  • 借助FileReader实现将文件编码为Base64后通过AJAX上传
  • 以下关于android应用程序的目录结构描述中,不正确的是
  • 四川税务局发票下载
  • 地税全国联网了吗
  • 金蝶EAS固定资产变更
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设