PHP字符串

PHP中的字符串是一种类C风格的字符串,只不过已经得到了很好的封装。在PHP中,可以将字符串包含在一对双引号或一对单引号之中,我们先来看一看双引号形式的字符串都有哪些特点。

如果使用过C、C++、C#或Java,你一定知道在字符串中会使用一些转义字符,在PHP中的字符串中同样有这样的转义字符,以下就是在双引号定义的字符串中可以使用的转义字符。

  • \0 ,ASCII值为0的字符(NULL值)。
  • \n ,换行符。
  • \r ,回车符,即回到行首。
  • \t ,制表符。
  • \,将符号当作普通符号,而不是变量前缀。
  • \” ,双引号。
  • \ ,反斜线(\)符号。
  • {n} ,n将以八进制显示。
  • \x{n} ,n将以十六进制显示。

在这里需要注意的是\$转义,在PHP双引号字符串中,我们可以直接使用变量名,而显示时会自动替换为变量的值,如:

$num = 15;  
print "$num"; // 显示15
$num = 15;  
print "\$num = $num"; // 显示$num = 15

另一种常用的字符串是通过一对单引号来定义,这种字符串中只支持两种转义字符(\’和\),并且不支持显示变量值的功能,所以,在处理单引号字符串时,会减少很多工作,如查找字符串中的变量名和更多的转义字符等。

在PHP中,还有一种定义文本的方法是使用定界符<<<,常用格式如下:

<<<标签名称  
<文本内容>  
标签名称;
echo  
<<<DEFINE_TAG  
"一行文本"<br>  
"两行文本"<br>  
"三行文本"  
DEFINE_TAG;

代码显示结果如下图。

PHP字符串

请注意,代码中标签使用大写字母只是为了引起注意,实际上你也可以使用小写的标签。

字符串连接

很多编程语言中的字符串连接都会使用+运算符,但在PHP中不是,在PHP中,如果我们需要将两个字符串连接到一起,应使用串联运算符(.)。我们看几个例子:

$num = 1;  
$str = '2';  
echo $num+$str; //显示3  
echo '<br>';  
echo $num.$str; //显示12

我们可以看到,PHP会很智能地判断运算目的,使用+运算符就是数值相加,PHP会将非数值转换为数值后计算;而使用.运算符就是连接字符串,PHP会将数值转换为字符串进行连接操作。

访问字符串成员

在PHP中,我们可以使用从0开始的索引来获取或重写字符串中的字符,如:

$str = 'abcdefg';  
echo $str{2}; // 显示c

我们可使用{}或[]来指定索引值,不过,建议使用更新的{},这样可以区分字符串索引和数组索引(稍后讨论),提高代码的可读性。

此外,当我们获取字符串中的字符时,索引必须在允许的范围内,即从0到字符串字符数-1;在重写指定位置的字符时,如果索引超出了已有的范围,字符会写到指定索引的位置,而中间空的字符位置会使用空格填充。如下面的代码:

<?php  
str = 'abc';str{6} = 'g';  
echo $str; // 显示abc   g  
?>

请注意,在PHP中处理字符串时,字母g前会有三个空格,但是,显示到页面中就未必了,我们知道,页面中会忽略不必要的空白字符,如空格、回车、制表符等;不过,当我们查看页面源代码时,g前面还是有三个空格的。

接下来,我们了解一些常用的字符串函数。

获取字符数

strlen()函数用于获取字符串中的字符数量,如:

$str = 'abcdefg';  
echo strlen($str); // 显示 7

请注意,如果字符串中包括中文,strlen()函数返回的结果并不是正确的字符数量,此时,我们可以使用mbstring系列函数中的mb_strlen()函数。在代码中使用mbstring系列函数,你必须已经在php.ini配置文件中打开此功能,如:

extension = php_mbstring.dll

此外,如果修改了php.ini配置文件,请记得需要重启Web服务(如Apache服务)才能生效。

下面的代码演示了mb_strlen()函数的使用。

echo mb_strlen("中国");  // 显示2  
echo mb_strlen("中国的PHP社区");  // 显示8

mb是multibyte(多字节)的缩写,mbstring系统函数则可以用于处理中文、日文等多字节字符,更多的mbstring系列函数列表,你可以在php.net中搜索“mb_”进行查询。

字母大小写转换

PHP中字母大小写转换相关的函数有:

  • strtoupper(),将字符串中的字母都转换为大写字母,并返回转换结果。
  • strtolower(),将字符串中的字母都转换为小写字母,并返回转换结果。
  • ucfirst(),如果字符串第一个字符是字母,则将其转换为大写,并返回转换结果。
  • ucwords(),如果每一个单词的第一个字符是字母,则将它们转换为大写,并返回转换结果。

去空白字符

去空白字符函数可以将字符串前部或结尾处的空格、制表符等不可见字符去除;比如,我们获取用户输入的表单数据,就可以使用这些函数进行处理后保存到数据库,从而避免保存多余的空白字符。常用的函数有:

  • trim(),去除字符串前后的空白字符。
  • rtrim(),去除字符串结尾的空白字符。
  • ltrim(),去除字符串前部的空白字符。

字符串比较

strcmp()函数,按ASCII码比较两个字符串,相同返回0,否则返回非零值,此函数区分字母的大小写。如strcmp(‘abc’,’abc’)结果为0。

strcasecmp()函数,按ASCII码比较两个字符串,相同返回0,否则返回非零值,此函数不区分字母的大小写。如strcasecmp(‘abc’,’Abc’)结果为0。

strnatcmp()函数,按自然排序比较两个字符串,此函数区分字母大小写,如strcmp(‘9′,’10’)返回1,即’9’的ASCII码值大于字符2中的第一个字符’1’的ASCII码值;而strnatcmp(‘9′,’10’)返回-1,即9小于10。

strnatcasecmp()函数,按自然排序比较两个字符串,此函数不区分字母大小写。

连接与分割

explode()函数用于分割字符串,并返回分割后的数组,如:

$str = 'a,b,c,d,e,f,g';  
$arr = explode(',',$str);  
foreach($arr as $value)  
{  
    echo $value,'<br>';  
}

代码中的explode()函数,第一个参数为分隔字符串的字符或字符串,第二个参数为需要分隔的字符串;代码执行结果如下图:

PHP字符串

关于数组的概念稍后讨论。

此外,explode()函数还可以有第三个参数,用于指定返回的数组成员数量,如前面的代码修改为explode(‘,’,$str,3),则只会显示a、b、c。

implode()和join()函数功能一样,是将数组连接成一个字符串,并指定连接字符或字符串,如:

$arr = array('a','b','c','d','e','f','g');  
$str = implode(',',$arr);  
print $str;

代码会显示a,b,c,d,e,f,g。

截取字符串

substr()函数用于载取字符串中的一部分,它一般有三个参数:

  • 参数一为原字符串。
  • 参数二为开始截取的索引位置(首字符的索引值为0)。
  • 参数三为截取的字符数,这是一个可选参数,如果不指定,将截取从参数二指定的位置到字符串结束的全部内容。

如下面的代码:

$str = 'abcdefg';  
print substr($str,2,3); // 显示cde  
print substr($str,2); // 显示 cdefg

查找与替换

strstr()与strchr()函数用于在一个字符串(参数一)中查找匹配的子字符串(参数二)。如果有匹配的内容,函数将返回从第一次出现一直到末尾的所有内容,如果在参数一中不包含参数二的内容,则返回空字符串。如下面的代码。

$str = 'abcdefg';  
print strstr($str, 'cde');  // 显示 cdefg

stristr()函数,功能与strstr()函数基本一样,唯一的区别在于strstr()函数区分字母大小写,而stristr()函数不区分字母大小写。

strrchr()函数,从参数一的末尾向前查找,此函数区分字母大小写。如下面的代码。

$str = 'abcdefgcde';  
print strstr($str, 'cde');  // 显示cdefgcde  
print strrchr($str, 'cde');  // 显示cde,这是末尾的cde

strpos()函数,同样用于在一个字符串中查找一个子字符串,只不过此函数将返回子字符串首次出现的索引位置,此函数区分字母的大小写。如下面的代码。

$str = 'abcdefg';  
print strpos($str,'cde');  // 显示2,即c首次出现的索引位置

strrpos()函数,功能与strpos()函数相似,只是strrpos()函数会返回子字符串最后一次出现的索引位置。如下面的代码:

$str = 'abcdefgcde';  
print strrpos($str,'cde'); // 显示7

使用strpos()和strrpos()函数时请注意,如果没有找到匹配的子字符串,则函数会返回false值。但是,我们知道索引值0转换为布尔型时也是false,所以,我们进行判断时,应用使用===运算符,如下面的代码:

$str = 'abcdefg';  
if(strpos($str,'hij') === false)  
    print '没有匹配的字符串';

代码运行会显示“没有匹配的字符串”,再看下面的代码。

$str = 'abcdefg';  
if(strpos($str,'abc') == false)  
    print '没有匹配的字符串';  
else  
    print '有匹配的字符串';

此代码同样会显示“没有匹配的字符串”,这显然是不对的,如果我们将==运算符修改为===运算符,则会显示“有匹配的字符串”。

str_replace()函数,将参数三指定的字符串中,原内容(参数一)替换为指定的内容(参数二),并返回修改后的结果。如下面的代码:

$str = 'abcdefg';  
print str_replace('cde','***',$str); // 显示ab***fg

代码中的功能就是将$str变量中的cde替换成*,并返回替换后的结果。如果没有找到参数一中指定的内容,则返回参数三的全部内容。 str_replace()函数区分字母的大小写,如果不需要区分字母大小写,可以使用str_ireplace()函数。

substr_replace()函数,用于将一个字符串(参数一)中指定位置的内容替换成指定的内容(参数二),而指定替换的开始位置由参数三指定,参数四为可选参数,用于指定替换的字符数量。如下面的代码。

$str = 'abcdefg';  
print substr_replace($str,'*',3); // 显示为abc*

代码的作用是将从索引位置3开始的所有内容都替换为*。

下面的代码使用了第四个参数。

$str = 'abcdefg';  
print substr_replace($str,'*',3,3); // 显示为abc*g

代码的作用是将从索引位置3开始的三个字符(本例为def)替换为*。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程