仓酷云

标题: PHP编程:PHP 字符串操作入门教程 [打印本页]

作者: 精灵巫婆    时间: 2015-2-4 00:13
标题: PHP编程:PHP 字符串操作入门教程
最近陆续的有人问我学习php的心得,现在整理为下面,希望可以对大家有些帮助。教程|入门教程|字符串   不管哪一种言语,字符串操作都是一个主要的基本,常常是复杂而主要。正像人措辞一样,普通无形体(图形界面),有言语(print 字符串?),明显字符串能注释更多的器材。PHP供应了大批的字符串操作函数,功效壮大,利用也对照复杂,具体请参看 [url]http://cn2.php.net/manual/zh/ref.strings.php[/url] . 以下将复杂的讲述它的功效和特征。

弱类型
PHP是弱类型言语,所以其它类型的数据普通可以直策应用于字符串操作函数里,而主动转换成字符串类型,停止处置,如
:
echo
substr("1234567", 1, 3);

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

界说
普通用双引号或单引号标识一个字符串。好比
$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 <<< test
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

对照
普通可以用
!=, == 对照两个对象是不是相等,只所以说是两个对象,是由于它们纷歧定全体为字符串,也能够为整型等等。好比
$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 (<0), 对照的是"d"和"e"

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 <font color="red">kiki</font>, iwind said.";
echo htmlspecialchars($str);
将会输入
i love <font color="red">kiki</font>, iwind said.

2,htmlentities($string)
将一切能转换成实体模式的字符都转换成实体模式。

3,html_entity_decode($string);
PHP4.3.0今后到场的具有与htmlentities($string)相反的功效。

4,nl2br($string)
将字符串中一切换行符改变成<br /> + 换行符。如:
$str = "i love kiki,n iwind said.";
echo nl2br($str);
将会输入
i love kiki,<br />
iwind said.


加密加密字符串最经常使用的就是md5了,它将一个字符串转换成一个长32位的独一的字符串。
echo md5("i love iwind"); // 将输入 "2df89f86e194e66dc54b30c7c464c21c"

PHP5给md5加了第二个参数,从而使它可以输入16位的加密后的字符串。



到这里,这篇字符串操作入门教程就算停止了,但下面讲的这些还只是它的冰山一角,出格是PHP5以后增添了大批的新功效,所以需求咱们不休的去进修它才有能够很好的使用。

理解网站这一概念之后不难看出,任何网站都是由网页组成的,也就是说想完成网站,必须先学会做网页,因此必须要掌握了HTML,才能为今后制作网站打下基础。
作者: 小魔女    时间: 2015-2-4 10:02
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 柔情似水    时间: 2015-2-9 22:02
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 小妖女    时间: 2015-2-12 10:07
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 只想知道    时间: 2015-2-21 09:39
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 乐观    时间: 2015-3-6 20:04
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
作者: 金色的骷髅    时间: 2015-3-9 23:53
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 蒙在股里    时间: 2015-3-13 07:09
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 山那边是海    时间: 2015-3-15 13:05
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 小女巫    时间: 2015-3-22 00:09
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者: 冷月葬花魂    时间: 2015-3-22 19:16
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 若天明    时间: 2015-3-31 02:36
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 飘飘悠悠    时间: 2015-4-11 10:19
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 简单生活    时间: 2015-4-15 05:07
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 再现理想    时间: 2015-4-16 16:09
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 分手快乐    时间: 2015-4-18 14:29
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
作者: 灵魂腐蚀    时间: 2015-5-1 18:09
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者: 海妖    时间: 2015-5-4 03:45
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 再见西城    时间: 2015-5-4 05:22
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者: 飘灵儿    时间: 2015-5-11 10:23
Ps:以上纯属原创,如有雷同,纯属巧合




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2