函数简介

在字符串中查找指定的字符串,查找方式为 顺序 查找。即从字符串“头”找到字符串“尾”。

查找成功:返回指定字符串在原字符串中的第一个位置。

查找失败:返回 flase

函数原型

strpos( $haystack, mixed $needle, [,offset=0]);

//从php7.1.0版本开始,strpos()的offset支持传入负数

参数解析

$haystack:原字符串

$needle:要查找的字符串

$offset:可选参数,用于指定在原字符串中开始搜索的位置

实例1: 简单的查找(不指定开始搜索的位置)

$str = "one plus one equals tow" ; //原字符串

$search = "one" ; //要查找的字符串

var_dump(strpos($str,$search)) ;

?>

运行结果

D:\WampServer\www\MyPhpCode\01.php:5:int 0

从运行结果可知,strpos()的返回值为 int 型,返回结果为 0 ,因为要查找的字符串就在原字符串的“开头”。

如果不知道 0 是什么,其实0是o的下标,1是n的下标,可以参考下面的小下标对照表。

o |n |e | |p |l |u |s | |o |n |e | |e |q |u |a |l |s | |t |o |w

0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10|11|12|13|14|15|16|17|18|19|20|21|22

小提示:var_dump()函数与print_r()函数功能相似,但前者输出的信息更为详细,调试时建议用var_dump()函数输出结果

实例二(传递第三个参数,指定开始搜索的位置)

$str = "one plus one equals tow" ; //原字符串

$search = "one" ; //要查找的字符串

var_dump(strpos($str,$search,3)) ; //指定开始的查找位置为3

?>

运行结果

D:\WampServer\www\MyPhpCode\01.php:5:int 9

在第二个例子中,要查找的字符串依旧为one,但这次的结果由原来的 0 变为 9 ,因为我规定了在原字符串的第3个字符的位置开始查找(可对照第一个例子的下标表),所以原字符串中"开头"的one在查找范围之外,因而返回的是第二个one在原字符串的位置,即 9 。

倒序指定开始查找的位置

php7.1.0版本开始支持传入负数来规定开始搜索的位置。

原字符串:one plus one equals tow

strpos($str,$search,-3)会在tow字符串中寻找

strpos($str,$search,-10)会在equals tow字符串中寻找

例如寻找“one plus one equals tow”中的“equals“。

顺序查找

$sh = 'one plus one equals tow' ;

$search = 'equals' ;

var_dump(strpos($sh,$search));

?>

输出 D:\WampServer\www\MyPhpCode\01.php:4:int 13

倒序指定位置

$sh = 'one plus one equals tow' ;

$search = 'equals' ;

var_dump(strpos($sh,$search,-11)); //将在 equals tow 中查找

?>

输出 D:\WampServer\www\MyPhpCode\01.php:4:int 13

返回值处理问题

在最后提下处理strpos()返回值false的问题,看下面代码。

$sh = 'false and ture' ;

$search = 'false' ;

$value = strpos($sh,$search) ;

if( $value == false ) {

echo "无匹配字符" ;

} else {

echo "位置: ".$value ;

}

?>

从上面代码可以看出,我的目的是在strpos()函数无法匹配到字符串时打印提示信息,否则打印要查找字符串在原字符串中的位置(偏移量),看下面的运行结果

无匹配字符

并不是我们期待的结果

再看下面代码

$sh = 'false plus one equals tow' ;

$search = 'false' ;

$value = strpos($sh,$search) ;

if( $value === false ) {

echo "无匹配字符" ;

} else {

echo "位置: ".$value ;

}

?>

结果

位置: 0

为什么会这样?因为 "==" 运算符只是对值进行比较,当类型不一样的数据进行对比时,如果一方为数字,另一方如果不是数字,则会转换为 0 后再比较。而 "===" 对比数据类型与值。

if( $value == false ) <==等价于==> if( $value == 0 ) <==等价于==> if( 0 == 0 )

所以,如果要对strpos()的返回值做判断,应该始终使用 "===" 或者 "!==" 这类运算符。

总结

strpost()函数在字符串中寻找指定字符串

strpos()函数可在指定的位置开始匹配字符串

strpos()函数在7.1.0版本开始支持倒序指定匹配位置

应该使用 “===” 或 “!==” 这类判断符来处理strpos()的返回值

p.s.为什么我睡不着要来写文章???

@_@

php 字符串 strpos,PHP字符串处理函数:strpos() -- 内置函数相关推荐

  1. Hive函数(内置函数(字符串函数,数学函数,日期函数,集合函数,条件函数,聚合函数,表生成函数)和自定义函数(自定义函数创建流程,临时函数,永久函数)))(四)

    Hive函数(内置函数和自定义函数) 一.内置函数 1.字符串函数 (1)ascii (2)base64 (3)concat (4)concat_ws (5)format_number (6)subs ...

  2. python内置高阶函数求导_Python——函数式编程、高阶函数和内置函数,及

    Python--函数式编程.高阶函数及内置函数 函数式编程 一.不可变数据:不用变量保存状态不修改变量 二.第一类对象:函数即"变量" 1.函数名可以当做参数传递 2.返回值可以是 ...

  3. Python函数05/内置函数/闭包

    Python函数05/内置函数/闭包 内容大纲 1.内置函数(二) 2.闭包 1.内置函数(二) #(abs()) 绝对值--返回的都是正数 #print([abs(i) for i in lst]) ...

  4. decode函数_Python 内置函数总一

    内置函数 python内置函数,截至python3.6.2版本之前一共68个内置函数,内置函数是可以直接使用的函数. Python标准库/内置函数链接:点击此处 内置函数分类 作用域相关 基于字典的形 ...

  5. python葵花宝典第15式-匿名函数、内置函数、映射函数

    python葵花宝典第15式-匿名函数.内置函数.映射函数 15.1 lambda函数(匿名函数) 匿名函数并不是没有函数名字 注意: (1)函数的参数可以有多个,多个参数之间用逗号隔开 (2)匿名函 ...

  6. html中写嵌套的js函数,Javascript 嵌套函数 - 递归函数 - 内置函数详解

    在了解了函数的定义和函数调用外,下面我们来介绍一下JavaScript中几种特殊的函数. JavaScript特殊函数有3种: (1)嵌套函数: (2)递归函数: (3)内置函数: 下面详细给大家讲解 ...

  7. php 闪电,PHP闪电入门(16)函数-常用内置函数

    前言: 今天我们列举并简单解释常用的字符串函数. 内容概要: 1.关于PHP内置函数的学习建议 2.PHP字符串常用函数 3.常用PHP数组常用函数 一.关于PHP内置函数的学习建议 php内置函数非 ...

  8. python内置方法就是内置函数_python内置函数

    什么是内置函数? 就是python给你提供的,拿来直接用的函数, 比如print 和 input等等. 截止到python版本3.6.2 python一共提供了68个内置函数. 他们就是python直 ...

  9. python内置函数open_python_内置函数和open

    一.内置函数 以下是python的内置函数: 1)常用内置函数 set() :集合,主要用来去重. dict():字典模式. min():返回可迭代对象中,最小元素. max():返回可迭代对象中,最 ...

  10. 七 递归与二分法、匿名函数、内置函数

    一 递归与二分法 一.递归调用的定义 二.递归分为两个阶段:递推,回溯 三.python中的递归效率低且没有尾递归优化 四.可以修改递归最大深度 五. 二分法 二 匿名函数 一. 什么是匿名函数? 二 ...

最新文章

  1. 基于PSR-0编码规范开发一套PHP-MVC框架(一)
  2. java8新特性-lambda表达式和stream API的简单使用
  3. 15个C++项目列表
  4. 11张图演进SeviceMesh服务网格
  5. modbus 台达a2_驱控智造未来 台达重磅发布多款工业自动化新品
  6. Golang——接口、多态、接口继承与转换、空接口、类型断言
  7. Win7下安装git
  8. 判断一个点是否在矩形内部_矩形、圆形泄水管规格型号优势
  9. 下载css-loader 安装及使用
  10. .NET Core 管道
  11. 美国网络安全体系架构揭秘
  12. UTXO 和 Account 模型对比
  13. artDialog | 经典的网页对话框组件
  14. Jenkins企业应用
  15. WUSTOJ 1318: 区间的连通性(Java)
  16. leetcode 5473. 灯泡开关 IV(C++)
  17. 李俊计算机哈佛大学,李俊-中国科学院大学-UCAS
  18. Python批量获取高校基本信息
  19. Android LVDS格式(JEIDA与VESA)
  20. 【转】USB供电不足的解决办法

热门文章

  1. 《东周列国志》第九十六回 蔺相如两屈秦王 马服君单解韩围
  2. A4988与42步进电机
  3. react-use react hook 库
  4. html中竖线怎么写,HTML如何写出竖线
  5. 随机生成验证码,并判断是否正确(String版)
  6. 扒一扒那些叫欧拉的定理们(八)——欧拉公式和自然对数的底e
  7. 效率篇-定时任务管理系统,替代crontab
  8. php7cms手册,phpcms手册下载|
  9. vue-router仿天猫底部导航栏
  10. ironpython是什么意思_IronPython .NET Integration官方文档翻译笔记