位置: 编程技术 - 正文

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

  • 个人取得上市公司股票期权个人所得税
  • 出租车手撕票可以换成增值税发票吗
  • 固定资产改造超过原值多少需要转固
  • 出口收入账务处理
  • 转让无形资产增值税
  • 营改增对建筑业的影响
  • 从农民手中购买农产品税率
  • 企业自建房是什么意思
  • 关于进项税额转出的规定
  • 非同一控制企业合并商誉
  • 代开增值税发票沒有付款怎么做账?
  • 买二手车转让费一般要多少钱
  • 上年的一张服务费的发票能否做账到今年?
  • 饮料厂税率
  • 收到供应商发票分录应怎么写?
  • 溢价发行股票的相关交易费用冲减资本公积
  • window10下载cad2014
  • 计提固定资产折旧怎么做会计科目
  • 抵债资产账务处理程序
  • 公积金的扣款怎么取消
  • 购车人丢失发票怎么查
  • 红字发票步骤
  • 资产为什么等于成本
  • 手续费及佣金收入会计分录
  • flask 教程
  • 固定资产加速折旧最新税收政策2023
  • vue3 原理
  • 汇算清缴退税的账务处理
  • 持有待售资产属于
  • 函数模拟图
  • DEDECMS php.ini register_globals must is Off!如何解决
  • 织梦cms怎么样
  • 出租房产怎么交房产税
  • 个人扣税是怎么扣的
  • 劳务公司可以用工资表做成本
  • 运费增值税发票抵扣
  • 电商商品采购流程
  • 以前年度的销售退回能否直接冲减销售收入
  • 财政补助结转结转的依据
  • 应付职工薪酬账户期初余额为4000元
  • 在建工程的人工费进行了全员申报后,清算时怎么处理?
  • 生产成本人工费结转
  • 政府补贴收入确认政策
  • 装饰公司购买的安装服务怎么入账
  • 会计总账怎么做账
  • sql server不可用或不存在什么意思
  • mysql8高可用
  • sql server key
  • 如何用win7
  • ubuntu更新软件
  • 如何配置samba配置文件
  • 正常关机开机后爱奇艺自动卸载
  • linux中使用grep命令显示包含特殊字符的行
  • 一岁的宝宝可以喝枸杞水吗
  • win10预览版好吗
  • winxp如何将桌面文件默认到d盘
  • linux添加启动
  • win101903更新安装失败
  • win8.1系统更新
  • win8点设置没反应
  • 怎么对js代码程序进行设计
  • Python探索之Metaclass初步了解
  • javascriptcsdn
  • 批处理应用实例
  • bat读取文件内所有内容
  • js怎么检查错误
  • 批处理文件教程
  • 用户dsn添加
  • unity安装进度条不动
  • python灰度变换
  • js能实现的简单效果
  • 使用应用程序的好处
  • html做一个新闻app首页
  • 常州国家税务局待遇
  • 未清卡会锁死吗?
  • 运费没有发票怎么报销
  • 云南国税通用发票查询
  • 公司欠税款,还不上,怎么办
  • 加拿大的环保
  • 湖南省水利建设基金
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设