本期格言:
越高级的技术越需要扎实的基本功。而学好基本功的首要条件是能沉住气和静下心。
往往很多程序员太想一口吃一个肥婆而直接略过基础部分去学习高级部分,长期以往会导致越来越丧失继续学下去的信心,但迫于各种压力又不想放弃,于是气急攻心、郁闷纠结,最后血压越来越高,于是产生了一个程序员通病的描述词:“浮躁”。
本期扯淡:
大家会发现很多程序员喜欢买书自学。其实这是很好的习惯,有对IT行业的热情和喜好就会有执着,有了执着就会想尽各种办法获取知识,当我们通过无限的量变后跳过了执着这个阶段,终于欣喜的发现了走出“程序员囧途”的出口,于是开始不顾一切的奋起创业。
然而买书自学方面,一些有点初级技术经验的程序员青年可能有个习惯:一般会先熟读第二章(有些书第一章啰嗦到什么程度,大家懂的)。
然后发现头两章挺简单,于是偷偷的往后跳过四到五章,这个跳跃很有意思,一般技术类书籍过了五、六章后,会开始讲实例和应用。
于是该青年顿时来了兴趣,他决定先看应用实例,因为实例搞懂了明天就可以投简历了,效率多高啊。于是青年点上烟盘腿坐在床上,并警告室友把dota音效关掉。
一个小时后,室友欢呼—“翻盘了”。再一看青年,已经在床上沉睡多时。
正文部分
PHP的string函数
很多javaer和C# Man经常会在网上互博,譬如”java好还是c#好”。这方面的话题甚至比”社会主义”好还是“资本主义”好讨论的更加激烈,更加无底线。这时其中一个javaer拿出java中对String对象的处理,宣称其有多么的高效率、结构多么的分明,C# Man不甘示弱也拿出string对象,宣称其有多么的方便、功能有多么的强大。这时一个PHPer不小心点进了该贴,他弱弱的打算参与跟帖,于是他列出了PHP中string函数列表,瞬间终结了上面(意)淫乱的场面。
不得不说,PHP的string函数确实非常强大。很有名的wordpress把这些函数几乎用到了极致,而今天本文要简要讲的就是关于PHP的string函数。
string函数是php内置的。不需安装,不需引用任何函数库。
这点很好,干净利落。我喜欢,拿来就可以使用。
接下来爆料几个常用的string函数,不常用的大家可以去查手册,个人建议有些函数根本不用去学,用的时候再查即可。这点是java或者c#均不能媲美的。
一、去空格,字符替换,输出
这三个字符处理函数实在是太常见了,行内人士把它们叫做“三宝”,为何叫三宝?那是因为掌握这三宝加上一些html知识简直就可以立马上手做一个并不是特别幼稚的页面了,同时基本上大部分功能性函数都要用到这老三样。
去空格:trim 。去除字符串前后空格
用法也灰常的简单 如:
$str=’ 南京8秒绿灯走百米 中国式过马路孰之错 ‘;
$str=trim($str); // 这里就达到了去除”南“和”错“两个字身边的空格
这个函数看似简单,不过有个小学问。它不光是去除字符串两把的普通空格,还能去除字符串两边的”\t(这货是全太阳系最讨厌的,白白净净的,不仔细看还以为是空格其实是一个tab)” “\0″也就是 NULL。”\n”换行符,”\x0B” – 纵向列表符, ”\r” – 回车。所以不要以为trim只去空格,其实php内核默默无闻的帮你干掉了很多字符。
如果$str=trim($str,’\t’); 则代表 这个trim只去除字符串前后的 \t也就是 tab,遇到普通空格之类的是不会管的。
输出:它存在 echo、print、printf 这三个主要函数
至于区别:大家只需知道 print比echo稍微慢,printf可以格式化输出即可。不用搞的太清楚。如果什么都要搞得太明朗太计较,那么你何必去学php。
这里只讲printf(print大家就忘记这货吧,只需用echo即可)
$str = “php”;
$number = 100;
printf(“开心学%s %u天”,$str,$number);
则会输出 开心学php100天。按照顺序%s代表字符出,$u代表数字。有几个%符号,后面就要跟几个参数。如果我倒过来写:
printf(“开心学%s %u天”,$number,$str); 那就会输出开心学100 0天。php首先会把$number当做字符串那100就是”100″,把”php”这个字符串当做数字型,大家知道把php变为数字是行不通的,所以就是0.
字符串替换函数:str_replace
这个函数非常的有用。怎么个有用发?网警会让你充分知道你为什么要学会这个函数。你懂的。
$str=str_replace(“敏感词汇”,”我爱祖国”,”XXX@#%$&%@这里其中有一个是敏感词汇“);
这就代表我要把某些 敏感词汇替换成”我爱祖国“。注意这个函数后面还有个count可选参数。几乎没什么用,那是用来计数用的,代表一共替换了几次。如果要实现只替换几个,那么要用正则表达式来做。本章暂时不讲。
有人说这个函数效率差。其实对于小网站小数据量的处理根本无所谓。如果你发现你的网站中简简单单的str_replace一个小字符串已经很影响服务器性能了。那么恭喜你,你要发大财了。
二、strpos()
这个函数也是非常有用的。类似于我们在其他语言中常用的indexof。
譬如:$str=’这是我又一个个人博客:网址是www.shenyisyn.org。’;
那么:
$i=strpos($str,”shenyisyn”);
echo strval($i); //注意 这里为什么要用strval ,如果这个$i 有值,那么它是int型的。你直接输出在网页里,通过肉眼是看不到的。
输出结果就是38。
这里有个小学问:
我们不能简单的用 if(strpos($str,’shenyisyn’)) 来判断字符串中是否存在 “shenyisyn”这个词汇。
因为假如
$str=”shenyisyn是我的中文名缩写”;
那么 strpos($str,’shenyisyn’) 的真值是0。在php中0就是false。而实际上这个匹配是能匹配到的
所以你要这样:
if(strpos($str,’shenyisyn’)===false) 这就代表没有指定的’shenyisyn’这个字符串存在.
在PHP中 ”===”的区别就好比高考时的”裸体检查“,除了医生确认我们==男生外,还要裸体”===”确认一下,万一你只是外表像而已呢?也就说”===”连值带类型一起比对了。在php中0==false,但是0!===false
这个函数是从左到右进行检索。反过来就是strrpos 它是从右往左,类似于lastindexof
同样的.strpos是区分大小写。那么不区分的函数就是stripos。另外一个从右往左的货就是 strripos。
用法一样只不过顺序不一样。就不多赘述了。
三、计算字符串长度-strlen
这是一个很搞的函数。都怪秦始皇走的太早。如果统一了全世界就没这问题了。
$str=”红十会”;
echo strval(strlen($str));
大家知道结果么?肯定不是3,也不是6,而是9。
大家看一下:strlen(“红十会”); 这里默认每个中文字符算3个字节。那么整个长度就是6。这里英文和数字都是1个字节。如果改成strlen(“红10会”);那么就是3+1+1+3=8个字节。
如果要转换成大家耳目能详细的 英文1个字节,中文两个字节 那么要这么做
echo mb_strlen($str,’utf8′); //这里要确保mbstring 这个库被开启。默认是不开启的。
当然mb_strlen第二个参数还可以是gbk或者gb2312,这个不建议使用,这会让你对人生感到迷茫的。况且现在开发网站,使用utf8是基本之道。如果你的网站连使用utf8这样的大字库都产生巨大压力了而无法正常运转了,那么再一次恭喜你,你这次真的发了。既然发了,那就不在乎多买几台服务器了。
四、strip_tags 剥去html标记
官方中文解释使用了”剥去“,这个词用得好。用了剥去这个犀利的词语。什么叫剥去?好比你明明穿了一件很炫很酷的t恤去单位路上,突然一个流氓跑过来把你的t恤剥去穿自己身上跑了,于是你只能光着身子回单位上班,到了单位同事把你笑了一整天。
这个剥去就是这个效果。它只是剥掉,并没有过滤掉包含在html或者xml标记内部的内容。
如:$str=”一个老汉好心捐了10万<strong>被挪用后</strong>,他很伤心”;
那么$str=strip_tags($str);
echo $str; 则 会输出 一个老汉好心捐了10万被挪用后,他很伤心。
这个函数的”剥去“效果在于,他不会把<strong>标记中间的”被挪用后“的字符删去,否则就变成了”一个老汉好心捐了10万,他很伤心“。
这个函数非常妙。妙到大大的降低了我们开发web程序中的很多难度和繁琐的地方。正应了php就是为web而生的这句话。
今天暂时讲这几个函数。稍后继续。。。。
如有不当之处,望积极指正。
注:本系列后续章节的转载除非本人自发,否则一律必须得到本人的书面同意。否则本人保留投诉和鄙视的权利。
原文作者:沈逸
转自 程序员在囧途:http://www.shenyisyn.org/2013/05/05/php100-5.htm