1、字符串的定义
1.1、定义单引号字符串
- 从上图可以看出:单引号字符串的变量不能被解析;
- 从上图可以看出:转义字符空格
 
可以被解析
- 从上图可以看出:转义字符回车换行
\r\n
不能被解析
- 从上图可以看出:在单引号的字符串不可以使用单引号(语法错误)
- 如果想在字符串输出特殊字符,需要使用转义符: \
1.2、定义双引号字符串
从上图可以看出:双引号中的变量可以被解析
为了规范,建议在变量中加上大括号
{}
$str = '我是变量字符串';
echo "ABCDEFG{$str}";
- 从上图可以看出:转义字符回车换行
\r\n
不能被解析(需在源码中查看)
1.3、使用heredoc
定义字符串
可以看作是双引号字符串的Plus+,个人理解为多行的双引号字符串。(PHP4.0+)
1.标识符可以自定义 一般的 有EOT ,EOD EOF 等, 只有保持开始表示符和结束表示符一样即可(实际标识符默认是双引号,可以省略不写。);
2.结束表示符必须独占一行,且必须顶格写,不能有空格,最后以 ‘;’ 分号结尾;
3.所有引用的字符串中可以包含变量,无需字符串连接符。
- 从上图可以看出:heredoc中可以html+php混编,非常适合模板的编写
1.4、使用nowdoc
定义字符串
可以看作是单引号字符串的Plus+,个人理解为多行的单引号字符串。(PHP5.3+)
nowdoc
语法与heredoc
相同,唯一区别标识符需要加上单引号;
注:字符串大小的上限: 2G
2、字符串常用函数
2.1 printf()
输出格式化的字符串;
$str1='中国人';
$str2='骄傲';
printf('我是一名%s,我很%s。',$str1,$str2);
//输出:我是一名中国人,我很骄傲。
// 比如sql语句:
$table='users'; //表名
$limit=10; //返回条目
printf('SELECT * FROM `%s` LIMIT %d', $table, $limit);
//输出:SELECT * FROM `users` LIMIT 10
- % 符号代表的值:
No | % 符号 | 说明 |
---|---|---|
1 | %% | 返回一个百分号 % |
2 | %b | 二进制数 |
3 | %c | ASCII 值对应的字符 |
4 | %d | 包含正负号的十进制数(负数、0、正数) |
5 | %e | 使用小写的科学计数法(例如 1.2e+2) |
6 | %E | 使用大写的科学计数法(例如 1.2E+2) |
7 | %u | 不包含正负号的十进制数(大于等于 0) |
8 | %f | 浮点数(本地设置) |
9 | %F | 浮点数(非本地设置) |
10 | %g | 较短的 %e 和 %f |
11 | %G | 较短的 %E 和 %f |
12 | %o | 八进制数 |
13 | %s | 字符串 |
14 | %x | 十六进制数(小写字母) |
15 | %X | 十六进制数(大写字母) |
2.2 vprintf()
输出格式化的字符串(与printf()
功能相同,区别在于后面变量使用数组。);
$table='users'; //表名
$limit=10; //返回条目
vprintf('SELECT * FROM `%s` LIMIT %d', [$table, $limit]);
//输出:SELECT * FROM `users` LIMIT 10
2.3 sprintf()
返回格式化的字符串(与printf()
类似,不输出,返回格式化后的字符串)
$table='users'; //表名
$limit=10; //返回条目
$sql = sprintf('SELECT * FROM `%s` LIMIT %d', $table, $limit);
//输出:SELECT * FROM `users` LIMIT 10
2.4 vsprintf()
返回格式化的字符串(与与sprintf()
功能相同,区别在于后面变量使用数组。);
$table='users'; //表名
$limit=10; //返回条目
$sql = sprintf('SELECT * FROM `%s` LIMIT %d', [$table, $limit]);
//输出:SELECT * FROM `users` LIMIT 10
2.5 file_put_contents()
把一个字符串写入文件中。
// file_put_contents(文件,数据,如何打开/写入文件,规定文件句柄的环境)
echo file_put_contents("sites.txt","我"); //默认覆盖写入,返回字符长度
// 使用 FILE_APPEND 标记,可以在文件末尾追加内容
// LOCK_EX 标记可以防止多人同时写入
echo file_put_contents("sites.txt","要学习", FILE_APPEND | LOCK_EX);
2.6 implode()
join()
把数组元素组合为一个字符串
$arr=['学生1','学生2','学生3','学生4','学生5','学生6'];
//将数组合为字符串,每个用“|”号分开
echo implode('|', $arr);
echo '<br>';
echo join('|', $arr);
// 输出:
//学生1|学生2|学生3|学生4|学生5|学生6
//学生1|学生2|学生3|学生4|学生5|学生6
//两个函数输出结果相同
2.7 explode()
字符串打散为数组
// explode(在哪里分割字符串,要分割的字符串,返回的数组元素的数量)
print_r(explode('|','学生1|学生2|学生3|学生4|学生5|学生6'));
// 返回数组:Array ( [0] => 学生1 [1] => 学生2 [2] => 学生3 [3] => 学生4 [4] => 学生5 [5] => 学生6 )
2.8 substr()
返回字符串的一部分
- 语法:
substr($string, $start, $length)
echo substr('ABCDEFG', 0), '<br>'; //输出全部
echo substr('ABCDEFG', 1), '<br>'; //输出BCDEFG
echo substr('ABCDEFG', 3), '<br>'; //输出DEFG
echo substr('ABCDEFG', 3,2), '<br>'; //输出DE(第3位开始取两位)
//注意:UTF8 中文1个字为3个字节
echo substr('我要学习', 3), '<br>'; //输出要学习
2.9 str_split()
把字符串分割到数组中
- 不写分割长度默认是 1
print_r(str_split('ABCDEF'));
// 输出:Array ( [0] => A [1] => B [2] => C [3] => D [4] => E [5] => F )
print_r(str_split('ABCDEF', 2));
// 输出:Array ( [0] => AB [1] => CD [2] => EF )
2.10 str_getcsv()
解析 CSV 格式字段的字符串,并返回包含所读取字段的数组。
print_r(str_getcsv('2,小美,18,xiaomei@php.cn'));
- 输出:Array ( [0] => 2 [1] => 小美 [2] => 18 [3] => xiaomei@php.cn )
2.11 file_get_contents()
整个文件读入一个字符串中。
- 示例:(csv文件结构如下)
id,name,age,email
1,小米,22,xiaomi@php.cn
2,小美,18,xiaomei@php.cn
3,小明,26,xiaomin@php.cn
$csvStr = file_get_contents('data.csv');
echo $csvStr;
// 输出:id,name,age,email 1,小米,22,xiaomi@php.cn 2,小美,18,xiaomei@php.cn 3,小明,26,xiaomin@php.cn
//字符串打散为数组
$csvArr = explode(",", $csvStr);
print_r($csvArr);
//输出结果如下:
2.12 str_pad()
把字符串填充为新的长度。
$str = "字符";
//字符不满10位在前面用“-”补齐
echo str_pad($str,10,"-",STR_PAD_LEFT),'<br>';
//输出:----字符
//字符不满10位在后面用“-”补齐
echo str_pad($str,10,"-",STR_PAD_RIGHT ),'<br>';
//输出:字符----
//字符不满10位在两边用“-”补齐
echo str_pad($str,10,"-",STR_PAD_BOTH ),'<br>';
//输出:---字符--
2.13 str_replace()
字符串替换
$css_pach='myapp/php_pro/css/style.css';
// 将以上CSS路径地址中的“/”替换“//”,并自动创建变量$i统计替换次数
echo str_replace('/', '//',$css_pach,$i);
echo '<br>查找并替换了:'.$i.'次';
// 输出:myapp//php_pro//css//style.css
// 查找并替换了:3次
// 字符串替换应用场景2
$str_key = ['交友', '广告', '直播', '带货'];
//find 查找的值支持数组
echo str_replace($str_key, '**', '广告代理, 直播教学, 免费带货,异性交友');
// 输出:**代理, **教学, 免费**,异性**
2.14 trim()
移除字符串两侧的空白字符或其他预定义字符。
$str = "...admin ";
echo $str;
// 原始输出:...admin
echo "<br>";
echo trim($str, ".");
// 移除后输出:admin
- 类似函数
- ltrim() 函数 移除字符串左侧的空白字符或其他预定义字符。
- rtrim() 函数 移除字符串右侧的空白字符或其他预定义字符。
2.15 strpos()
查找字符串在另一字符串中第一次出现的位置。
$str1='hello php.cn';
$str2='php';
echo strpos($str1, $str2);
// 输出:6
2.16 strstr()
搜索字符串在另一字符串中是否存在
- 如果存在,返回该字符串及剩余部分,否则返回 FALSE。
echo strstr('admin@php.cn','@');
// 输出:@php.cn
echo (strstr('admin@php.cn','@')) ? '存在' : '不存在' ;
// 输出:存在
echo (strstr('admin@php.cn','#')) ? '存在' : '不存在' ;
// 输出:不存在
总结
- 了解了字符串的四种创建方式和使用方法
- 系统字符串函数逐个测试、学习,用法基本掌握,项目中灵活应用还需要实战加强。