第四章 字符串
1.单引号和双引号的区别
在使用单引号字符串时,字符串中需要转义的特殊字符只有反斜杠和单引号本身,单引号不能识别插入的变量。相比双引号,这种定义字符串的方式不但直观而且速度快。
<?php
echo 'hello world \\ test'; // hello world \ test
// 转义单引号
echo 'let\'s go'; // let's go
echo 'This is a test'; // This is a test
$a = 'hello';
// 单引号不会解析变量$a的值
echo '$a world'; // $a world
echo "$a world"; // hello world
?>
使用双引号定义的字符串可以解析其中的变量。双引号还有一些转义序列,如表1-1所示。
<?php
echo "I dont't like\ it\\"; // I dont't like\ it\
echo "It takes me \$10.25 \t"; // It takes me $10.25
$name = 'test';
echo "\"$name\" is important"; // "test" is important
?>
2.字符串连接符
PHP中使用“.”来连接两个字符串。
<?php
$str1 = 'hello';
$str2 = ' world';
echo $str1.$str2; // hello world
?>
3.字符串操作
字符串常用处理函数包括:字符串的查找、替换、截取、去空格、转义等。
3.1改变字符串大小写
可以使用以下函数来改变字符串的大小写:
- Ucfirst将字符串首字母转换成大写
- Lcfirst将字符串首字母转换成小写
- Ucwords将字符串中每个单词的首字母转换成大写
- Strtoupper将字符串转换成大写
- Strtolower将字符串转换成小写
<?php
$str = 'hello world, php'."\n";
echo ucfirst($str); // Hello world, php
echo ucwords($str); // Hello World, Php
echo strtoupper($str); // HELLO WORLD, PHP
$str2 = "Hello World";
echo strtolower($str2); // hello world
echo lcfirst($str2); // hello World
?>
3.2查找字符串
3.2.1 stripos
查找字符串中某部分字符串首次出现的位置(不区分大小写)
语法如下:
int stripos(string $haystack, string $needle[, int $offset = 0])
参数说明:
- haystack:在该字符串中查找
- needle:needle可以是单字符或多字符测字符串。如果needle不是一个字符串,它将被转换成整型,并被视为字符串顺序值。
- offset:指定从haystack中开始查找的位置,返回的位置数字值仍然相对于haystack的起始位置。(字符串位置起始于0)
<?php
$c = 'c';
$str1 = 'xyz';
$str2 = 'ABC';
$pos1 = stripos($str1, $c);
$pos2 = stripos($str2, $c);
var_dump($pos1); // bool(false)
var_dump($pos2); // int(2)
?>
3.2.2 strpos
查找字符串首次出现的位置(区分大小写)。
语法如下:
mixed strpos(string $haystack, mixed $needle [, int $offset = 0])
**说明:**和strrpos()、strripos不一样,strpos的偏移量不能是负数。
<?php
$find = 'c';
$f1 = 'C';
$str = 'AbcaBC';
$pos1 = strpos($str, $find);
$pos2 = strpos($str, $f1);
var_dump($pos1); // int(2)
var_dump($pos2); // int(5)
?>
3.2.3 strripos
计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
语法如下:
int strripos(string $haystack, string $needle [, int $offset = 0])
**说明:**负数偏移量将使得查找从字符串的起始位置开始,到offset位置为止。
<?php
$f1 = 'w';
$f2 = 'e';
$str = 'Hello World';
$pos1 = strripos($str, $f1);
$pos2 = strripos($str, $f2);
var_dump($pos1); // int(6)
var_dump($pos2); // int(1)
?>
3.2.4 strrpos
计算指定字符串在目标字符串中最后一次出现的位置。
语法如下:
int strrpos(string $haystack, string $needle [, int $offset = 0])
**说明:**如果是负数的偏移量,将会导致查找在字符串结尾处开始的计数位置处结束。
<?php
$f1 = 'c';
$f2 = 'C';
$str = 'ABCabcCBA';
$pos1 = strrpos($str, $f1);
$pos2 = strrpos($str, $f2);
$pos3 = strrpos($str, $f2, -5);
var_dump($pos1); // int(5)
var_dump($pos2); // int(6)
var_dump($pos3); // int(2)
?>
3.3替换字符串
3.3.1 str_ireplace()和str_replace()函数
str_ireplace()和str_replace使用新的字符串替换原来字符串中指定的特定字符串,str_replace区分大小写,str_ireplace()不区分大小写。两者语法相似,str_ireplace()的语法如下:
mixed str_ireplace(mixed $search, mixed $replace, mixed $subject [, int &$count])
**说明:**该函数返回一个字符串或数组。该字符串或数组将subject中全部的search用replace替换(忽略大小写)之后的结果。参数count表示执行替换的次数。
<?php
$str = 'hello, world, hello, php';
$replace = 'hi';
$search = 'hello';
echo str_ireplace($search, $replace, $str); // hi, world, hi, php
?>
3.3.2 substr_replace()函数
substr_replace()函数的语法如下:
mixed substr_replace(mixed $string, mixed $replacement, mixed $start [, mixed $length])
说明:
- substr_replace()在字符串string的副本中将由start和可选的length参数限定的子字符串使用replacement进行替换。
- 如果start为正数,替换将从string的start位置开始。
- 如果start为负数,替换将从string的倒数第start个位置开始。
- 如果设定了length参数,且为正数,则表示string中被替换的子字符串的长度。
- 如果length设置为负数,则表示代替换的子字符串结尾处距离string末尾的字符个数。如果没有提供此参数,默认为strlen(string)(字符串的长度)
<?php
$str = 'hello, world, java, php, python, hello';
$replace = 'hi';
echo substr_replace($str, $replace, 0, 6); // hi world, java, php, python, hello
echo "\n";
echo substr_replace($str, $replace, 0, -1); // hio
echo "\n";
echo substr_replace($str, $replace, -1, 6); // hello, world, java, php, python, hellhi
echo "\n";
echo substr_replace($str, $replace, 0); // hi
?>
3.4 截取字符串
PHP中使用substr截取字符串,其语法如下:
string substr(stirng $string, int $start [, int $length])
说明:
- 其作用是返回字符串string由start和length参数指定的长度为length的子字符串。
- 如果start是非负数,返回的字符串将从string的start位置开始(从0开始计算)。
- 如果start是负数,返回的字符串将从string末尾处向前数第start个字符串开始。
- 如果string的长度小于等于start,则返回false.
<?php
$str = 'Seek the truth from facts.This is a test!';
echo substr($str, 1)."\n"; // eek the truth from facts.This is a test!
// 从末尾开始数第三个位置,开始截取
echo substr($str, -3)."\n"; // st!
echo substr($str, -2, 1)."\n"; // t
echo substr($str, 15)."\n"; // from facts.This is a test!
var_dump(substr($str, 50)); // bool(false)
?>
3.5去除字符串首尾空格和特殊字符
在PHP中,
- 使用trim()函数可以去除字符串首尾两边的空格或特殊字符
- 使用ltrim()函数可以去除字符串 左边的空格或特殊字符
- 使用rtrim()函数可以去除字符串右边的空格或特殊字符
string trim(string $str [, string $character_mask]) string ltrim(string $str [, string $character_mask]) string rtrim(string $str [, string $character_mask])
其中, character_mask是过滤字符串。如果不指定这两个参数,trim()将去除以下字符:
- " ",普通空格符
- “\t”,制表符
- “\n”,换行符
- “\r”,回车符
- “\0”,空字符串
- “\x0B”,垂直制表符
<?php
$text = "\t\tThese are a few words:)... ";
$binary = "\x09Example string\x0A";
$hello = "Hello World!";
echo trim($text)."\n"; // These are a few words:)...
echo rtrim($text)."\n"; // These are a few words:)...
echo rtrim($text, " \t.")."\n"; // These are a few words:)
echo ltrim($hello, "H")."\n"; // ello World!
// 删除$binary末端的ASCII码控制字符(包含0~31)
echo rtrim($binary, "\x00..\x1F")."\n"; // Example string
?>
These are a few words:)...
These are a few words:)...
These are a few words:)
ello World!
Example string
3.6 计算字符串的长度
PHP中使用strlen()函数返回字符串的长度,该函数的语法如下:
int strlen(string $string)
<?php
$str1 = 'abcdefg';
echo strlen($str1); // 7
$str2 = ' ab cd ';
echo strlen($str2); // 7
/**
* PHP不同编码下,一个中文占的字符长度不同。
* 1.GBK/gb2312:2个
* 2.UTF-8/unicode:3个
*/
$str3 = '这是个测试';
echo strlen($str3); // 15
?>
使用mb_strlen()函数统计字符串长度。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。
mb_strlen ( string `$str` [, string `$encoding` = mb_internal_encoding() ] )
- str:要检查长度的字符串。
- encoding:参数为字符编码。如果省略,则使用内部字符编码。
3.7 转义和还原字符串
PHP中使用addslashes()函数转义字符串。该函数的语法格式如下:
string addslashes(string $str)
**说明:**该函数返回转移后的字符串,在一些特殊字符前加了转移符号“\”。这些字符是:单引号、双引号、反斜杠和NULL。
<?php
$str = "I'm fine.Thank you";
echo addslashes($str); // I\'m fine.Thank you
?>
stripslashes可以还原经过addslashes转义后的字符串。
<?php
$str = "I'm fine.Thank you";
echo addslashes($str); // I\'m fine.Thank you
echo stripslashes(addslashes($str)); // I'm fine.Thank you
?>
3.8重复一个字符串
使用str_repeat()函数可以重复一个字符串,语法如下:
string str_repeat(string $input, int $multiplier)
**说明:**该函数返回input重复multiplier次后的结果。multiplier必须大于等于0。如果multiplier设置为0,则返回空字符串。
<?php
echo str_repeat("^_^", 5); // ^_^^_^^_^^_^^_^
?>
3.9 随机打乱字符串
可使用str_shuffle()函数来随机打乱一个字符串,其语法如下:
string str_shuffle(string $str)
**说明:**str_shuffle()函数打乱一个字符串,使用任何一种可能的排序方案。
<?php
$str = 'abcdefg123';
echo str_shuffle($str)."\n";
echo str_shuffle($str)."\n";
echo str_shuffle($str)."\n";
echo str_shuffle($str)."\n";
?>
132bfdeagc
dfc132geba
ge1f2d3cab
cdeag2f3b1
3.10 分割字符串
可以使用explode()函数将一个字符串分割成另一个字符串,其语法如下:
array explode(string $delimiter, string $string [, int $limit])
**说明:**此函数返回由字符串组成的数组,每一个元素都是 delimiter表示分割字符,如果设置了limit参数且是正数,则返回的数组最多包含limit个元素,而最后那个元素将包含$string剩余的部分。如果limit参数为负数,则返回除最后的-limit个元素外的所有元素。如果limit为0,则会被当作1。
<?php
$color = "red green blue";
$colors = explode(" ", $color);
print_r($colors);
$input = 'hello, world';
print_r(explode(', ', $input));
?>
Array
(
[0] => red
[1] => green
[2] => blue
)
Array
(
[0] => hello
[1] => world
)
参考链接:
https://www.cnblogs.com/ryanzheng/p/8285113.html
https://www.jb51.net/article/163832.htm