PHP 字符串
在本教程中,我们将学习PHP字符串和各种操作字符串的内置字符串函数。
定义PHP字符串
在PHP中,字符串是字符的序列。
在PHP中定义文字字符串有四种方法:单引号、双引号、heredoc语法和nowdoc语法。
单引号字符串 VS 双引号字符串
若要定义一个字符串,请将单引号(')中包含的字面量字符串值赋给新变量,如下所示:
<?php $str = '这是一个PHP字符串';
这是在PHP中定义字符串的最简单方法。
你也可以使用双引号("), 如下所示:
<?php $str2 = "PHP字符串也可以用双引号括起来";
当你用双引号来括起一个字符串时,PHP会给你一些额外的特性:
- 双引号字符串接受字符串中的变量。PHP将解析变量名并使用它们的值替换它们。这类似于Perl中的变量插值特性。
- 双引号字符串可以通过转义表达特殊字符,例如\n、\r、\t…。
让我们看一下例子:
<?php $site_name = 'theITroad.com'; $message = "欢迎访问 $site_name!"; echo $message; // 欢迎访问 theITroad.com
PHP会将双引号字符串$message中的$site_name变量替换为它的值'theITroad.com'。
下面的示例演示了如何在双引号字符串中使用特殊字符:
<?php $foo = 'World'; $message = "Hello\n$foo"; echo '<pre>' . $message . '</pre>'; //Hello //World
PHP使用换行替换特殊字符\n。
herdoc语法字符串 VS nowdoc语法字符串
如果您想定义一个包含大量单引号或双引号的字符串,
您可以使用heredoc和nowdoc语法来避免使用转义字符。
下面是heredoc的语法:
$str = <<<IDENTIFIER 把字符串放在这里 IDENTIFIER;
首先,指定操作符<<<,然后是标识符 IDENTIFIER,最后是换行符。
接下来,放入一个字符串值。
最后,使用相同的标识符IDENTIFIER 来关闭字符串。
下面的例子使用heredoc语法定义了一个字符串:
<?php $s = <<<EOT 我是一个使用heredoc语法的字符串。 我可以包含单引号(')和双引号标记("), 也可以使用转义字符。比如将\n转换为换行符。 我还将字符串中的变量替换成他们的值。 EOT; echo $s;
nowdoc语法字符串与heredoc语法字符串类似,只是nowdoc语法中的标识符用单引号括起来。
$s = <<<'EOT' 我是一个使用nowdoc语法的字符串。 我可以包含单引号(')和双引号标记("), 但不能使用转义字符。即不会进行特殊字符转换 也不将字符串中的变量替换成他们的值。 EOT; echo $s;
读取字符串中的字符
要访问字符串中特定位置的字符,可以使用以下语法:
$s[index]
将索引index放在字符串变量后面的方括号[]之中。
字符串的第一个位置是零(0)。
可以使用index读取和更改字符串的内容,如下例子所示:
<?php $str = 'this is a PHP string'; $str[0] = 'T'; echo $str;
获取字符串的长度
要获取字符串中的字符数,可以使用内置函数strlen()。它接受一个字符串作为参数并返回该字符串中的字符数。
让我们看看下面使用strlen()函数的示例:
<?php $str = 'this is a PHP string'; echo strlen($str); // 请注意中英文字符串的长度问题 // 特别是文件保存为utf-8和ansi不同编码的情况 // 对于utf-8格式来说,计算字符串长度一般使用mb_strlen $str = '这是一个PHP字符串'; echo strlen($str); echo mb_strlen ($str,'utf-8');
如果要计算字符串中的字数,可使用str_word_count()函数:
<?php $str = 'This is a PHP string'; echo str_word_count($str); // 5
比较字符串
PHP提供了两个内置函数strcmp()和strcasecmp()用于比较两个字符串。
两个函数都接受两个字符串参数并返回一个整数:
- 如果两个字符串相等,则返回0。
- 如果第一个字符串大于第二个字符串,它将返回一个大于0的数字。
- 如果第一个字符串小于第二个字符串,则返回一个小于0的数字。
strcmp()函数和strcasecmp()函数之间的惟一区别是:
strcasecmp()函数比较字符串时忽略大小写,而strcmp()函数则不忽略。
<?php $str1 = 'PHP String'; $str2 = 'php string'; $result = strcasecmp($str1,$str2); if($result == 0){ echo '$str1 和 $str2 相等'; }else if($result > 0){ echo '$str1 大于 $str2'; }else{ echo '$str1 小于 $str2'; }
输出:
$str1 和 $str2 相等
连接字符串
在PHP中, 可以使用点号(.)操作符连接字符串。
如果将字符串与非字符串类型的变量连接,结果将是字符串,因为PHP在连接之前会自动将非字符串变量转换为字符串变量。
下面的例子演示了字符串连接:
<?php $str = '这是PHP字符串' . ' 的连接字符串演示。'; echo $str . '<br/>'; $age = 2; $s1 = '岁了'; $s2 = ' 站点theitroad' . $age . ' ' . $s1 . '.'; echo $s2;
搜索字符串
PHP为搜索字符串提供了几个有用的函数,包括strstr()、strpos()、strrpos()、substr_count()和strpbrk()。
PHP检测字符串中是否包含子字符串
要检查字符串是否包含特定的子字符串,可以使用strstr()函数。
strstr()接受两个参数:要检查的字符串和要搜索的子字符串。如果找到了子字符串,该函数将返回从找到的文本开始到字符串结束的部分。如果找不到子字符串,则返回false。
<?php $str = 'Find a substring in a string 在字符串中查找子字符串'; $sub_str = 'substring'; echo strstr($str,$sub_str); //substring in a string 在字符串中查找子字符串
获取子字符串出现的次数
要获得字符串中出现子字符串的次数,可以使用substr_count()函数。
substr_count()函数在很多情况下是很有用的,
例如,可以计算一篇文章中提到一个关键字的次数来计算它的密度。
<?php $str = <<<EOT A string is series of characters, where a character is the same as a byte. This means that PHP only supports a 256-character set, and hence does not offer native Unicode support. See details of the string type. Note : As of PHP 7.0.0, there are no particular restrictions regarding the length of a string on 64-bit builds. EOT; $keyword = 'string'; $word_count = str_word_count($str); $keyword_count = substr_count($str,$keyword); if($word_count > 0){ $density = $keyword_count * 100 / $word_count; echo number_format($density, 2, '.', '') . '%'; //5.36% }
在PHP字符串中定位子字符串的位置
如果想知道子字符串在字符串中的确切位置,可以使用strpos()函数。它返回字符串中第一个子字符串的位置。
<?php $str = 'Using strpos function in PHP'; $sub_str = 'strpos'; echo strpos($str,$sub_str); // 6
strrpos()函数与strpos()函数类似,只是它返回字符串中子字符串最后一次出现的位置。
<?php $str = 'String function'; $sub_str = 'n'; echo strpos($str,$sub_str); // 4 echo strrpos($str,$sub_str); // 14
检查一个字符串是否包含一组字符中的任何字符
要检查字符串是否包含一组字符中的任何字符,可以使用strpbrk()函数。
strpbrk()函数接受两个参数:一个字符串和一组需要查找的字符。
它返回从找到的字符开始的子字符串,如果一组字符中的字符没有出现在字符串中,则返回false。
strbbrk()函数在很多情况下都是有用的,例如,你可以检查一个用户名是否包含一个集合中的任何特殊字符,@,$,%等等。
<?php $username1 = 'theITroad'; $username2 = 'admin@itroad'; $not_allowed_chars = '!@#$%^&*'; if(strpbrk($username1, $not_allowed_chars)){ echo 'username1是无效的用户名,因为它包含了' . $not_allowed_chars.'中的字符'; } if(strpbrk($username2, $not_allowed_chars)){ echo 'username2是无效的用户名,因为它包含了' . $not_allowed_chars.'中的字符'; }
替换字符串
PHP提供了一些有用的字符串替换函数,可以用不同的字符串替换字符串的某些部分,包括str_replace()、substr_replace()和strst()。
替换所有出现的搜索字符串
要用替换字符串替换所有出现的搜索字符串,可以使用str_replace()函数。
让我们看看下面的例子:
<?php $str = 'A string is series of characters. See details of the string type. '; echo str_replace('string', 'text', $str); // A text is series of characters. // See details of the text type.
我们将字符串$str中所有出现的' string '都替换成了' text '。
要计算搜索字符串被替换的次数,需要将第四个参数传递给函数,如下所示:
<?php $str = 'A string is series of characters. See details of the string type. '; $times = 0; str_replace('string', 'text', $str, $times); echo "字符串被替换了$times 次";
输出:
字符串被替换了2 次
PHP 删除字符串中的空白字符
- 要删除字符串开头的空白,可以使用ltrim()函数。
- 要删除字符串末尾的空白,可以使用rtrim()函数。
- 要删除字符串开头和结尾的空白,可以使用trim()函数。
<?php $s1 = ' 开头有空格的字符串'; $s2 = '末尾有空格的字符串 '; $s3 = ' 在开头和结尾处都有空白的字符串 '; echo ltrim($s1) . '<br/>'; echo rtrim($s2) . '<br/>'; echo trim($s3) . '<br/>';