18.字符串操作
trim()函数:去除字符串收尾空格和特殊字符,返回去掉空格和特殊字符后的字符串
string trim(string str [,string charlist]);
参数str是要操作的字符串对象,参数charlist为可选参数,指定需要从字符串中删除哪些字符,如果不设置该参数,则所有可选字符都被删除,可选值如下
\0 null,空值
\t tab,制表符
\n 换行符
\x0B 垂直制表符
\r 回车符
"" 空格
$str = "\r\r(:这是一个字符串。 你看出来了吗:) "; echo trim($str).'<br>'; echo trim($str,"\r\r(::)");
ltrim()函数:去除字符串左边的空格和特殊字符
string ltrim(string str[,string charlist]);
rtrim()函数:去除字符串右边的空格和特殊字符
string rtrim(string str[,string charlist]);
19.字符串转义、还原
手动转义字符,使用“\”:echo 'select * from book where bname=\'PHP从入门到精通\'';
自动转义字符函数:
string addslashes(string str)
自动还原使用addslashes函数转义的字符串函数:
string stripslashes(string str)
所有数据在插入数据库之前,最好应用addslashes()函数进行字符转义,以免特殊字符未经转义而在插入数据库时出现错误。
下面函数实现对字符串中的指定字符charlist前加上反斜杠“\”进行转义
string addcslashes(string str,string charlist)
20.获取字符串的长度,汉字占两个字符,数字、英文、小数点、下划线和空格占一个字符
int strlen(string str)
21.截取字符串
string substr(string str,int start[,int length])
参数str:指定字符串对象
参数start:指定开始截取字符串位置,如果参数为负数,则从字符末尾开始截取
参数length:可选参数,指定截取字符串的个数,如果为负数,则表示取到倒数第length个字符
注意:start的位置是从0开始计算的,如果使用该函数截取中文字符串,如果截取的长度是奇数(针对GB2312编码),那么会导致截取后的字符串出现乱码(GB2312一个汉字两个字节,UTF-8一个汉字三个字节)。
可以使用字符串截取来输出一段文字的部分内容,多余的部分使用省略号显示
$str = '现在一般说来,日本人在打电话给他人时,第一句会先报出自己的姓氏,再问对方是不是某某家,若没打错,才报出要找某某人或有某某事等目的。';
if (strlen($str)>30) { echo substr($str,0,30).'...'; //超过30个字符,用省略号显示 }else { echo $str; }
22.比较字符串
1)按字节进行字符串比较
int strcmp(string str1,string str2)//区分字符的大小写
int strcasecmp(string str1,string str2)//不区分字符大小写
参数str1与参数str2指定要比较的两个字符串,如果相等则函数返回值为0,如果参数str1大于str2,则返回值大于0,反之则返回值小于0
2)按自然排序进行字符串比较
int strnatcmp(string str1,string str2)//区分字符的大小写
int strnatcasecmp(string str1,string str2)//不区分字符的大小写
参数str1与参数str2指定要比较的两个字符串,如果相等则函数返回值为0,如果参数str1大于str2,则返回值大于0,反之则返回值小于0,本函数区分字母大小写
3)指定从源字符串的位置开始比较
int strncmp(string str1,string str2,int len)//区分字符的大小写
参数str1:指定参与比较的第一个字符串对象
参数str2:指定参与比较的第二个字符串对象
参数len:必要参数,指定每个字符串中参与比较字符的数量
比较字符串中的前n个字符,如果相等则函数返回值为0,如果参数str1大于str2,则返回值大于0,反之则返回值小于0
23.检索字符串
1)使用strstr()函数查找指定的关键字
string strstr(string haystack,string needle)//区分字符的大小写
参数haystack:必要参数,指定从哪个字符串中进行搜索
参数needle:必要参数,指定搜索的对象,如果参数是一个数值,那么将搜索与这个数值的ASCII值相匹配的字符
2)strchr()函数与其正好相反,该函数从字符串后序的位置开始检索子串的
24.使用substr_count()函数检索子串出现的次数
int substr_count(string haystack,string needle)
参数haystack:指定的字符串
参数needle:指定待查找的子字符串
25.正则表达式
1)行定位符(^和$)
“^”表示行的开始,“$”表示行的结尾
^tm 该表达式匹配tm开始的字符串,如tm equal Tomorrow Moon
$tm 该表达式匹配tm结尾的字符串,如equal Tomorrow Moon tm
2)单词定界符(\b、\B)
\b 匹配的是一个完整的单词,而不是单词的一部分
\B 匹配的不是一个完整的单词,而是单词的一部分,如\Btm\B可匹配html、utmost等
3)字符类([])
正则表达式区分大小写,如果要忽略大小写,可使用“[]”,一个方括号只能匹配一个字符
要匹配tm且不区分大小写:[Tt][Mm]
POSIX风格的预定义字符类
[:digit:] 十进制数字集合。等同于[0-9]
[[:alnum:]] 字母和数字的集合。等同于[a-zA-Z0-9]
[[:alpha:]] 字母集合。等同于[a-zA-Z]
[[:blank:]] 空格和制表符
[[:xdigit:]] 十六进制数字
[[:punct:]] 特殊字符集合。包括键盘上所有特殊字符,如!@#$?等
[[:print:]] 所有的可打印字符(包括空白字符)
[[:space:]] 空白字符(空格、换行符、换页符、回车符、水平制表符)
[[:graph:]] 所有的可打印字符(不包括空白字符)
[[:upper:]] 所有大写字母,[A-Z]
[[:lower:]] 所有小写字母,[a-z]
[[:cntrl:]] 控制字符
4)选择字符(|)
可理解为“或”
要匹配tm且不区分大小写:[Tt][Mm] 也可写成 T|tM|m 意思是以字母T或t开头,后面接一个字母M或m
5)连字符(-)
[a,b,c,d...A,B,C,D...]可使用连字符简单写成[a-zA-Z],匹配规则的变量名(以字母或下划线开头)
6)排除字符([^])
[^a-zA-Z]匹配不以字母和下划线开头的变量名
7)限定符(?*+{n,m})
? 匹配前面的字符零次或一次 colou?r可匹配colour和color
+ 匹配前面的字符一次或多次 goo+gle可匹配google到goooooo...gle
* 匹配前面的字符零次或多次 goo*gle可匹配gogle到gooooo...gle
{n} 匹配前面的字符n次 go{2}gle只匹配google
{n,} 匹配前面的字符最少n次 go{2,}gle可匹配google到goooo...gle
{n,m} 匹配前面的字符最少n次,最多m次 employe{0,2}可匹配employ、employe、employee三种情况
8)点号字符(.)
点字符可匹配换行符外的任意一个字符
^s.t$可匹配sat、sit、set等
9)转义字符(\)
与PHP中使用的转义字符类似
10)反斜杠(\)
反斜杠显示的不可打印字符
\a 警报
\b 退格
\e Escape
\f 换页符
\n 换行符
\r 回车符
\t 水平制表符
\xhh 十六进制代码
\ddd 八进制代码
\cx control-x的缩写,匹配由x指明的控制字符,其中x是任意字符
反斜杠指定的预定义字符集
\d 任意一个十进制数字,相当于[0-9]
\D 任意一个非十进制数字
\s 任意一个空白字符(空格、换行符、换页符、回车符、水平制表符)
\S 任意一个非空白字符
\w 任意一个单词字符,相当于[a-zA-Z0-9]
\W 任意一个非单词字符
反斜线断言的限定符
\b 单词定界符,用来匹配字符串中的某些位置
\B 非单词定界符序列
\A 总是能够匹配待搜索文本的起始位置
\Z 表示在未指定任何模式下匹配的字符,通常是字符串的末尾位置,或者是在字符串末尾的换行符之前的位置
\z 只匹配字符串的末尾,而不考虑任何换行符
\G 当前匹配的起始位置
11)括号字符(())
小括号的第一个作用就是改变限定符的作用范围
(thir|four)th 匹配thirth和fourth,如果不是用括号,就变成了匹配thir和fourth
小括号的第二个作用是分组,也就是子表达式。如(\.[0-9]{1,3}){3},就是对分组(\.[0-9]{1,3})进行重复操作
12)反向引用
反向引用,就是依靠子表达式的“记忆”功能来匹配连续出现的字符串或字母。如匹配连续两个it,首先将单词it作为分组,然后加上“\1”即可
(it)\1
26.声明数组
array array[mixed...]
参数mixed的语法为key=>value,多个mixed之间使用逗号隔开,分别定义索引和值,索引可以是字符串或数字。
如果省略了索引,则自动产生从0开始的整数索引。如果索引是整数,则下一个产生的索引将是目前索引最大的整数索引+1.如果定义了两个一样的索引,则后定义的覆盖先定义的
数组中的各数据元素的数据类型可以不同,也可以是数组类型。当mixed是数组类型时,就是一个二维数组
27.数字索引数组
PHP数字索引一般表示数组元素在数组中的位置,它由数字组成,下标从0开始,数字索引数组默认索引值从数字0开始,不需要特别指定。
28.关联数组
关联数组的键名可以是数字和字符串混合的形式,而不像数字索引数组的键名只能为数字。在一个数组中,只要有一个键名不是数字,那么这个数组就称为关联数组。
如果键名是一个字符串,访问数组时需要给索引或者键名加上定界修饰符——单引号或双引号
29.输出数组
使用echo语句、print语句输出数组中的某一元素,通过print_r()函数可以将数组结构进行输出。语法格式如下
bool print_r(mixed expression)
如果参数expression为普通整型、字符型或实型变量,则输出该变量本身。如果为数组,则按键值和元素的顺序输出该数组中的所有元素。
30.数组的构造
1)一维数组:
当一个数组的元素是变量时,称这个数组为一维数组,声明一维数组的一般形式是:
类型说明符 数组名[常量表达式];
例:$arr = array(1=>"Java",2=>"C语言",3=>"PHP");
2)二维数组:
一个数组的元素如果是一维数组,则称这个数组是二维数组。
$arrstr = array( "书籍"=>array("语文","数学","英语"), "体育用品"=>array("m"=>"足球","n"=>"篮球"), "水果"=>array("橙子",8=>"葡萄","苹果") ); print_r($arrstr);
输出:Array ( [书籍] => Array ( [0] => 语文 [1] => 数学 [2] => 英语 ) [体育用品] => Array ( [m] => 足球 [n] => 篮球 ) [水果] => Array ( [0] => 橙子 [8] => 葡萄 [9] => 苹果 ) )
31.遍历数组
1)使用foreach结构遍历数组
遍历数组最常用的方法是使用foreach结构。foreach结构并非操作数组本身,而是操作数组的一个备份。
$arr = array("1"=>"数据结构","2"=>"算法","3"=>"C语言","4"=>"PHP"); foreach ($arr as $val){ echo $val; }
上面的代码中,PHP为数组$arr的每个元素依次循环执行循环体(echo语句),将当前数组元素赋值给$val
2)使用list()函数遍历数组
list()函数是把数组中的值赋给一些变量。与array()函数类似,list()函数不是真正的函数,而是一种语言结构。list()函数仅能用于数字索引且索引值从0开始的数组。语法格式如下:
void list(mixed...)
参数mixed为被赋值的变量名称。
32.字符串与数组的转换
1)使用explode()函数将字符串转换成数组
array explode(string separator,string string [,int limit])
函数将字符串以指定的字符串或字符(separator)切开,返回由字符串组成的数组,每个字符串都是指定字符串string的一个子串。
如果设置了limit参数,则返回的数组包含最多limit个元素,而最后那个元素包含string的剩余部分
如果separator为空字符串(""),explode()函数将返回false
如果separator所包含的值在string中找不到,那么explode()函数将返回包含string单个元素的数组
如果参数limit是负数,则返回除了最后的limit个元素外的所有元素。
2)使用implode()函数将数组转换成一个新字符串
string implode(string glue,array pieces)
参数glue是字符串类型,指要传入的分隔符,参数pieces是数组类型,指被传入的要合并元素的数组变量名称。
33.统计数组元素个数
使用count()函数对数组中的元素个数进行统计
int count(mixed array [,int mode])
参数array:必要参数。输入的数组
参数mode:可选参数,其值为0或COUNT_RECURSIVE(1)。如选中此参数,本函数将递归地对数组计数。对计算多维数组的所有单元尤其有用,此参数的默认值为0
34.查询数组中指定元素
使用函数
array_search(mixed needle,array haystack[,bool strict])
参数needle指定在数组中搜索的值
参数haystack指定被搜索的数组
参数strict为可选参数,如果为true,还将在数组中检查给定值的类型
35.获取数组中最后一个元素
mixed array_pop(array array)
通过函数array_pop()获取数组中的最后一个元素
参数array为输入的数组
array_pop函数获取并返回数组的最后一个元素,并将数组的长度减1,如果数组为空(或者不是数组),将返回null
36.向数组中添加元素
int array_push(array array,mixed var[,mixed...])
通过函数array_push()向数组中添加元素。
参数array为指定的数组
参数var为压入数组中的值
37.删除数组中重复元素
array array_unique(array array)
通过函数array_unique()删除数组中重复元素
参数array为输入的数组