PHP 字符串


在本教程中,我们将学习PHP字符串和各种操作字符串的内置字符串函数。

定义PHP字符串

在PHP中,字符串是字符的序列。

在PHP中定义文字字符串有四种方法:单引号、双引号、heredoc语法和nowdoc语法。

单引号字符串 VS 双引号字符串

若要定义一个字符串,请将单引号(')中包含的字面量字符串值赋给新变量,如下所示:

1
2
3
<?php
 
$str = '这是一个PHP字符串';

这是在PHP中定义字符串的最简单方法。

你也可以使用双引号("), 如下所示:

1
2
<?php
$str2 = "PHP字符串也可以用双引号括起来";

当你用双引号来括起一个字符串时,PHP会给你一些额外的特性:

  • 双引号字符串接受字符串中的变量。PHP将解析变量名并使用它们的值替换它们。这类似于Perl中的变量插值特性。
  • 双引号字符串可以通过转义表达特殊字符,例如\n、\r、\t…。

让我们看一下例子:

1
2
3
4
5
<?php
 
$site_name = 'theITroad.com';
$message = "欢迎访问 $site_name!";
echo $message; // 欢迎访问 theITroad.com

PHP会将双引号字符串$message中的$site_name变量替换为它的值'theITroad.com'。

下面的示例演示了如何在双引号字符串中使用特殊字符:

1
2
3
4
5
6
7
<?php
 
$foo = 'World';
$message = "Hello\n$foo";
 
echo '<pre>' . $message . '</pre>'; //Hello
//World

PHP使用换行替换特殊字符\n。

herdoc语法字符串 VS nowdoc语法字符串

如果您想定义一个包含大量单引号或双引号的字符串,
您可以使用heredoc和nowdoc语法来避免使用转义字符。

下面是heredoc的语法:

1
2
3
$str = <<<IDENTIFIER
把字符串放在这里
IDENTIFIER;

首先,指定操作符<<<,然后是标识符 IDENTIFIER,最后是换行符。
接下来,放入一个字符串值。
最后,使用相同的标识符IDENTIFIER 来关闭字符串。

下面的例子使用heredoc语法定义了一个字符串:

1
2
3
4
5
6
7
8
9
10
<?php
 
$s = <<<EOT
我是一个使用heredoc语法的字符串。
我可以包含单引号(')和双引号标记("),
也可以使用转义字符。比如将\n转换为换行符。
我还将字符串中的变量替换成他们的值。
EOT;
 
echo $s;

nowdoc语法字符串与heredoc语法字符串类似,只是nowdoc语法中的标识符用单引号括起来。

1
2
3
4
5
6
7
8
$s = <<<'EOT'
我是一个使用nowdoc语法的字符串。
我可以包含单引号(')和双引号标记("),
但不能使用转义字符。即不会进行特殊字符转换
也不将字符串中的变量替换成他们的值。
EOT;
 
echo $s;

读取字符串中的字符

要访问字符串中特定位置的字符,可以使用以下语法:

1
$s[index]

将索引index放在字符串变量后面的方括号[]之中。
字符串的第一个位置是零(0)。

可以使用index读取和更改字符串的内容,如下例子所示:

1
2
3
4
5
6
<?php
 
$str = 'this is a PHP string';
$str[0] = 'T';
 
echo $str;

获取字符串的长度

要获取字符串中的字符数,可以使用内置函数strlen()。它接受一个字符串作为参数并返回该字符串中的字符数。

让我们看看下面使用strlen()函数的示例:

1
2
3
4
5
6
7
8
9
10
11
<?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()函数:

1
2
3
4
<?php
 
$str = 'This is a PHP string';
echo str_word_count($str); // 5

比较字符串

PHP提供了两个内置函数strcmp()和strcasecmp()用于比较两个字符串。
两个函数都接受两个字符串参数并返回一个整数:

  • 如果两个字符串相等,则返回0。
  • 如果第一个字符串大于第二个字符串,它将返回一个大于0的数字。
  • 如果第一个字符串小于第二个字符串,则返回一个小于0的数字。

strcmp()函数和strcasecmp()函数之间的惟一区别是:
strcasecmp()函数比较字符串时忽略大小写,而strcmp()函数则不忽略。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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';
}

输出:

1
$str1 和 $str2 相等

连接字符串

在PHP中, 可以使用点号(.)操作符连接字符串。

如果将字符串与非字符串类型的变量连接,结果将是字符串,因为PHP在连接之前会自动将非字符串变量转换为字符串变量。

下面的例子演示了字符串连接:

1
2
3
4
5
6
7
8
9
<?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。

1
2
3
4
<?php
$str = 'Find a substring in a string 在字符串中查找子字符串';
$sub_str = 'substring';
echo strstr($str,$sub_str); //substring in a string 在字符串中查找子字符串

获取子字符串出现的次数

要获得字符串中出现子字符串的次数,可以使用substr_count()函数。

substr_count()函数在很多情况下是很有用的,
例如,可以计算一篇文章中提到一个关键字的次数来计算它的密度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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()函数。它返回字符串中第一个子字符串的位置。

1
2
3
4
<?php
$str = 'Using strpos function in PHP';
$sub_str = 'strpos';
echo strpos($str,$sub_str); // 6

strrpos()函数与strpos()函数类似,只是它返回字符串中子字符串最后一次出现的位置。

1
2
3
4
5
<?php
$str = 'String function';
$sub_str = 'n';
echo strpos($str,$sub_str); // 4
echo strrpos($str,$sub_str); // 14

检查一个字符串是否包含一组字符中的任何字符

要检查字符串是否包含一组字符中的任何字符,可以使用strpbrk()函数。

strpbrk()函数接受两个参数:一个字符串和一组需要查找的字符。
它返回从找到的字符开始的子字符串,如果一组字符中的字符没有出现在字符串中,则返回false。

strbbrk()函数在很多情况下都是有用的,例如,你可以检查一个用户名是否包含一个集合中的任何特殊字符,@,$,%等等。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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()函数。

让我们看看下面的例子:

1
2
3
4
5
6
7
8
9
<?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 '。

要计算搜索字符串被替换的次数,需要将第四个参数传递给函数,如下所示:

1
2
3
4
5
6
7
<?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()函数。
1
2
3
4
5
6
7
8
<?php
$s1 = ' 开头有空格的字符串';
$s2 = '末尾有空格的字符串 ';
$s3 = ' 在开头和结尾处都有空白的字符串 ';
 
echo ltrim($s1) . '<br/>';
echo rtrim($s2) . '<br/>';
echo trim($s3) . '<br/>';


原文链接:https://codingdict.com/