位置: 编程技术 - 正文

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 dns设置
  • ghost恢复方法
  • 苹果电脑录屏带麦克风
  • 合伙企业股东个人所得税费用扣除标准
  • sbdrvdet.exe - sbdrvdet是什么进程 有什么用
  • 金融机构拆出资金的最长期限
  • 30个极致实用的东西
  • php redis使用
  • 建筑行业有哪些岗位,从事的要求有哪些
  • thinkphp框架入门
  • echarts饼图颜色设置
  • springboot集成clickhouse
  • vue组件通信方法
  • 交给工会的40%的工会经费里还要再返60%吗
  • python2.7 协程
  • 跨年度退回的公共预算支出
  • 非金融企业借款利息收入计入什么科目
  • 自然人税收管理系统扣缴客户端官网
  • 房地产企业开发成本科目明细
  • mysql文件更改存放路径
  • 工会经费计提基数包括奖金吗
  • 清算所得税计税基础
  • 暂估成本分录怎么写
  • 商场活动经费预算
  • 房地产开发企业分为几个等级
  • 实缴增值税比计提增值税少怎么做账务处理
  • 微信验证收到的信息在哪
  • 研发成功后的产品出售如何处理
  • 长期借款的利息费用计入什么科目
  • 公司购买一台电脑,会计科目怎么办
  • 零申报资产负债表填0合适吗
  • 商贸公司库存表怎么做
  • 发票找不到了怎么操作
  • 购货方与付款方不一致
  • window10预览版
  • window打开注册表
  • linux 命令大全
  • win10系统怎么管理开机启动项
  • 与web站点和web页面
  • win7的系统
  • 十个常用linux脚本命令
  • 防止非法使用计算机,可口令
  • win7恶意程序怎么清除
  • jquery实现表单验证
  • cocos2dx-3.1.1 labelttf与label
  • python利用for循环求1到100的和
  • perl判断字符串相等
  • 权作记录 cocos2dx
  • 读取fasta文件
  • android auto翻译
  • jquery 插件写法
  • jquery 3.5
  • android系统主要特点
  • 贵州省地方税务局房地产税收征收管理办法
  • 税务更名需要什么材料
  • 资源税计税价格包括从坑口
  • 推动税务系统全面从严
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设