0

0

PHP学习:字符串操作入门教程_PHP

php中文网

php中文网

发布时间:2016-06-01 12:29:46

|

954人浏览过

|

来源于php中文网

原创

  论哪种语言,字符串操作都是一个重要的基础,往往是简单而重要。正像人说话一样,一般有形体(图形界面),有语言(print 字符串?),显然字符串能解释更多的东西。php提供了大量的字符串操作函数,功能强大,使用也比较简单.以下将简单的讲述它的功能和特性。

  弱类型

  PHP是弱类型语言,所以其它类型的数据一般可以直接应用于字符串操作函数里,而自动转换成字符串类型,进行处理,如:

echo substr("1234567", 1, 3);

echo substr(123456,1, 3);
是一样的

  定义

立即学习PHP免费学习笔记(深入)”;

  一般用双引号或单引号标识一个字符串。比如

$str = "i love u";
$str = 'i love u';

  它者两者是有一些区别的。后者将一切单引号的内容都会当作字符处理;前者则不然。比如

$test = "iwind";
$str = "i love $test";
$str1 = 'i love $test';
echo $str; //将得到 i love iwind
echo $str1; //将得到 i love $test

  同样的以下两个例子的行为也不一样的:

echo "i love \test"; // 将得到 i love est,已经将\t视为转义
echo 'i love \test'; // 将得到 i love \test

  从而可以简单认为双引号里的内容是经过“解释”过的,单引号的是“所见即所得”的(特殊地,'\'会被认作一个'\')。显而易见,双引号形式的更为灵活一些,当然单引号会适用于一些特殊的场合,这里就不作阐述了。

  输出

  PHP里的输出最常用的是echo,print.两者都不是真正的函数,而是语言构造,所以调用时不必用双括号(比如echo("test");print("test")).在输出的时候两者都可以实现赋值:

echo $str="test"; //一方面输出test,一方面把"test"赋给字符串变量 $str
print $str="test";

  两者除了名字不一样外,还是有其它区别的。print具有返回值,一直返回1,而echo没有,所以echo比print要快一些:

$return = print "test";
echo $return; // 输出1

  也正因为这个原因,print能应用于复合语句中,而echo不能:

isset($str) or print "str 变量未定义"; // 将输出"str 变量未定义"
isset($str) or echo "str 变量未定义";// 将提示分析错误

echo一次可输出多个字符串,而print则不可以:
echo "i ","love ","iwind"; // 将输出 "i love iwind"
print "i ","love ","iwind"; // 将提示错误

echo,print还可以输出被称作“文档句法”的字符串,句法如:
echo ...
字符串内容
...
标签名称;

比如
echo i love iwind
test;

  要注意的是语句开始和结束的两个标签名称是一样的,且后一个标签名称前不能有空白,即要顶格写。文档句法输出的内容识别变量名称和常用符号,大致形同双引号的作用。

  输出echo,print外,PHP还提供了一些格式化字符串的函数,比如printf,sprintf,vprintf,vsprintf,在这里不作详解。

  连接

  两个以上的字符串连接用"."操作符,依字符串的顺序形成新的字符串。

$str = "i " . "love " . "iwind";

  这里的$str 就是 "i love iwind";字符串。当然,还可以使用 .= 操作符:

$str = ""; // 初始化
$str .= "i love iwind";

  这里用到了初始化,是因为未定义变量在使用时会产生一个notice错误,""或者null可以简单地代表空字符串。

  长度

  PHP提供strlen函数来计算字符串的长度:

$str = "test";
echo strlen($str); // 将输出 4

  有点奇怪的是strlen将中日等汉字以及全角字符都当作两个或四个长度计算。好在mbstring或icon两个函数可以帮助解决这个问题,比如:

$len = iconv_strlen($str, "GBK");
$len = mb_strlen($str, "GBK");

  注:mbstring模块提供了大量的对含有多字节字符的字符串的处理函数,推荐多加应用,由于这篇文章讲的是字符串入门,所以不打算详细解说。

  分隔与连接

  PHP允许你把一个字符串按照一个分隔符进行分隔成一个数组,或者将一个数组组合成一个字符串。看下面的例子:

$str = "i love iwind";
$array = explode(" ", $str);

  上面的explode函数,就把$str字符串按空格字符进行分隔,结果返回一个数组 $array:array("i", "love", "iwind").与explode函数有类似功能的有:preg_split(), spliti(), split()等函数。

  与此相反的,implode和join则能把一个数组结合成一个字符串,他们是具有完全相同功能的函数。

$array = array("i", "love", "iwind");
$str = implode(" ", $array);

  例中的implode函数将数组$array的每个元素用空格字符进行连接,返回一个字符串 $str: "i love iwind".

  裁剪

  一个字符串首和尾,可能不是你想要的部分,就可以用trim,rtrim,ltrim等函数,分别去除一个字符串两端空格,一个字符串尾部空格,一个字符串首部空格。

echo trim(" i love iwind "); // 将得到 "i love iwind"
echo rtrim(" i love iwind "); // 将得到 " i love iwind"
echo ltrim(" i love iwind "); // 将得到 "i love iwind "

  其实这三个参数不仅可以去除字符串首尾的空格,还可以去除它们的第二个参数指定的字符,如:

echo trim(",1,2,3,4,", ","); // 将得到 1,2,3,4 两端的","号被裁掉了。

  有时还会看到有人使用chop这个函数,其实它是rtrim的同义函数。

  大小写

  对于英文字母来说,可以用strtoupper,strtolower将其转变成大写或小写。

echo strtoupper("i love iwind"); // 将得到 I LOVE IWIND
echo strtolower("I LOVE IWIND"); // 将得到 i love iwind

初阶PHP Apache MySQL网站设计
初阶PHP Apache MySQL网站设计

初阶PHP Apache MySQL网站设计来自作者多年学习、应用和讲授PHP的经验与体会,是专为学习PHP+MySQL数据库编程人员编与的入门教材。在最后二章设计了2个贴近实际应用的典型案例:留言本系统和论坛系统,每个案例先介绍开发思路、步骤,再给出全部源代码,使所学内容与实际应用紧密结合,特别是论坛系统将全书的案例串讲起来,力求使读者学到最贴近应用前沿的知识和技能。

下载

  比较

  一般可以用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为它们不一定全部为字符串,也可以为整型等等。比如

$a = "joe";
$b = "jerry";
if ($a != $b)
{
echo "不相等";
}
else
{
echo "相等";
}

  如果用 !==,===(可以看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较.

22 == "22"; // 返回 true
22 === "22"; // 返回false

  正因为这样,所以我们的程序时常会发生一些想不到的“意外”:

0 == "我爱你"; // 返回true
1 == "1 我爱你";// 返回true

  PHP里还有这样一组用于字符串比较的函数:strcmp,strcasecmp,strncasecmp(), strncmp(),它们都是如果前者比后者大,则返回大于0的整数;如果前者比后者小,则返回小于0的整数;如果两者相等,则返回0.它们比较的原理与其它语言的规则都是一样的。

strcmp是用于区分大小写(即大小写敏感)的字符串比较:
echo strcmp("abcdd", "aBcde"); // 返回 1 (>0), 比较的是 "b"和"B"

strcasecmp用于不区分大小写的字符串比较:
echo strcasecmp("abcdd", "aBcde"); // 返回 -1 (

strncmp用于比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncmp("abcdd", "aBcde", 3); // 返回 1 (>0), 比较了 abc 和 aBc

strncasecmp用于不区分大小写的比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncasecmp("abcdd", "aBcde", 3); // 返回 0, 比较了 abc 和 aBc, 由于不区分大小写,所以两者是相同的。

  还有一种情况是单单比较字符串大小,达不到我们预定的要求,比如照常理 10.gif 会比 5.gif 大,但如果应用上面几个函数,就会返回 -1,即表示 10.gif比5.gif,针对这种情况,PHP提供了两个自然对比的函数strnatcmp,strnatcasecmp:

echo strnatcmp("10.gif", "5.gif"); // 返回 1 (>0)
echo strnatcasecmp("10.GIF", "5.gif"); // 返回 1 (>0)

  替换

  替换的意义在于将一个字符串的一部分进行改变,使之成为别外一个新的字符串,以满足新的要求。PHP里通常用str_replace("要替换的内容", "要取代原内容的字符串", "原字符串")进行替换。
echo str_replace("iwind", "kiki", "i love iwind, iwind said"); // 将输出 "i love kiki, kiki said"
即将 原字符串中的所有"iwind"都替换成了"kiki".

str_replace是大小写敏感的,所以对你不能设想用 str_replace("IWIND", "kiki",...)替换原字符串中的"iwind".

str_replace还可以实现多对一,多对多的替换,但无法实现一对多的替换:
echo str_replace(array("iwind", "kiki"), "people", "i love kiki, iwind said");
将会输出
i love people, people said
第一个参数中的array("iwind", "kiki")都被替换成了"people"

echo str_replace(array("iwind", "kiki"), array("gentle man", "ladies"), "i love kiki, iwind said");

  输出 i love ladies, gentle man said 。也就是说第一个数组中的元素被第二个数组中的相对应的元素替换掉了,如果有一个数组比另一个数组元素数要少,那么不足的都会当作空来处理。

  与此有些类似的是strtr,

  此外,PHP还提供了substr_replace,实现替换一部分的字符串。语法如下:

substr_replace (原字符串, 要替代的字符串, 开始替换的位置 [, 替换的长度])

  其中,开始替换的位置从0开始计算,应该小于原字符串的长度。要替换的长度是可选的。

echo substr_replace("abcdefgh", "DEF", 3); // 将输出 "abcDEF"
echo substr_replace("abcdefgh", "DEF", 3, 2); // 将输出 "abcDEFfgh"

  第一个例子中,从第三个位置(即"d")开始替换,从而把 "defgh"都替换成了“DEF”

  第二个例子中,也是从第三个位置(即"d")开始替换,但只能替换2个长度,即到e,所以就把"de"替换成了"DEF".

  PHP还提供了preg_replace,preg_replace_callback,ereg_replace,eregi_replace等函数应用正则表达式来完成字符串替换,用法请参考手册。

  查找与匹配

  PHP里用于查找或者匹配或者定位的函数非常多,它们都有不同的意义。这里只讲述用得比较多的strstr,stristr.后者与前者的功能,返回值都一样,只是不区分大小写。

  strstr("母字符串", "子字符串")用来查找子字符串在母字符串中第一次出现的位置,并返回母字符串中从子字符串开始到母字符串结束的部分。比如

echo strstr("abcdefg", "e"); //将输出 "efg"

  如果找不到子字符串,则返回空。因为可以用来判断一个字符串中是否含有另外一个字符串:

$needle = "iwind";
$str = "i love iwind";
if (strstr($str, $needle))
{
echo "里面有 iwind";
}
else
{
echo "里面没有 iwind";
}
将会输出"里面有 iwind"

  HTML相关

  1,htmlspecialchars($string)

  这是它的最简单用法,将字符串中的一些特殊字符(顾名思义)&,',"转换成它们对应的HTML实体形式:

$str = "i love kiki, iwind said.";
echo htmlspecialchars($str);

  将会输出

i love kiki, iwind said.

  2,htmlentities($string)

  将所有能转换成实体形式的字符都转换成实体形式。

  3,html_entity_decode($string);

  PHP4.3.0以后加入的具有与htmlentities($string)相反的功能。

  4,nl2br($string)

  将字符串中所有换行符转变成 换行符。如:

$str = "i love kiki,\n iwind said.";
echo nl2br($str);

将会输出

i love kiki,

iwind said.

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Python 教程
Python 教程

共137课时 | 9.5万人学习

Java 教程
Java 教程

共578课时 | 67.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号