字符串类型
字符串定义语法
PHP中有四种:
1. 单引号字符串:使用单引号包裹
2. 双引号字符串:使用双引号包裹
引号方式:比较适合定义那些比较短(不超过一行)或者没有结构要求的字符串
如果有结构要求,或者内容超过一行,可以使用以下两种结构定义
3. nowdoc字符串:没有单引号的单引号字符串
$str = <<<’边界符’
字符串内容
边界符;
4. heredoc字符串:没哟双引号的双引号字符串
$str = <<<边界符
字符串内容
边界符;
//PHP字符串:定义
header('Content-type:text/html;charset=utf-8');
//引号定义
$str1 = 'hello';
$str2 = "hello";
//var_dump($str1,$str2);
//结构化定义
//heredoc结构
$str3 = <<<EOD
hello
world
EOD;
//nowdoc结构
$str4 = <<<'EOD'
hello
world
EOD;
//var_dump($str3,$str4);
字符串转义
PHP中系统常用的转义符号:
\’:在单引号字符串中显示单引号
\”:在双引号字符串中显示双引号
\r:代表回车(理论上是回到当前行的首位置)
\n:代表新一行
\t:类似tab键,输出4个空格
\$:在PHP中使用$符号作为变量符号,因此需要特定识别
//定义字符串识别转义符号
$str1 = 'abc\r\ndef\t\'\"\$fg';
$str2 = "abc\r\ndef\t\'\"\$fg";
echo $str1,'<br/>',$str2;
其中,双引号中因为能够识别$符号,所以双引号中可以解析变量,而单引号不可以
$a = 'hello';
//变量识别
//双引号中变量识别的规则
//1. 变量本身系统能够与后面的内容区分:应该保证变量的独立性,不要让系统难以区分 👉str2,str3
//2. 使用变量专业标识符(区分),给变量加上一组大括号{} 👉 str4
$str1 = 'abce $a dfg';
$str2 = "abce $a dfg";
$str3 = "abce$adfg";
$str4 = "abce{$a}dfg";
echo $str1,'<br/>',$str2,'<br/>',$str3,'<br/>',$str4;
🍎
Notice: Undefined variable: adfg in C:\fastwork\Apache24\htdocs\test.php on line 9
abce $a dfg
abce hello dfg
abce
abcehellodfg
结构化定义字符串变量的规则
1、 结构化定义字符串对应的边界符有条件:
1.1 上边界符后面不能跟任何内容;
1.2 下边界符必须顶格:最左边;
1.3 下边界同样后面只能跟分号,不能跟任何内容;
2、 结构化定义字符串的内部(边界符之间)的所有内容都是字符串本身
$a = 'hello';
$str1 = <<<XXX
//这是弹出内容
<script>
alert('$a'); //js弹出字符串必须要有引号
</script>
XXX;
echo $str1;
字符串长度问题
- 基本函数strlen():得到字符串的长度(字节为单位)
//字符串长度
header('Content-type:text/html;charset=utf-8');
//定义字符串
$str1 = 'abcefjdoifaoi';
$str2 = '你好中国123';
echo strlen($str1),'<br/>',strlen($str2);
🌴中文在utf8字符集下占3个字节
-
多字节字符串的长度问题:包含中文的长度
-
多字节字符串扩展模块:mbstring扩展(mb:Multi Bytes)
首先需要加载PHP的 mbstring 扩展, php.ini
中
extension = mbstring
mb
扩展可以带来更多函数。 mbstring 扩展针对的是一些关于字符统计:strlen只是针对标准交换码ASCII,mtstring会针对不同的字符集
//字符串长度
header('Content-type:text/html;charset=utf-8');
//定义字符串
$str1 = 'abcefjdoifaoi';
$str2 = '你好中国123';
echo strlen($str1),'<br/>',strlen($str2);
echo '<hr/>';
//使用mbstring扩展
echo mb_strlen($str1),'<br/>',mb_strlen($str2),'<br/>',mb_strlen($str2,'utf-8');
🍎
字符串相关函数
- 转换函数:implode(), explode(), str_split()
implode (连接方式,数组):将数组中的元素按照某个规则连接成一个字符串
explode (分割字符,目标字符串):将字符串按照某个格式进行分割,变成数组
中国|北京|顺义 == array(‘中国’,‘北京’,’顺义’);
str_split(字符串,字符长度):按照指定长度拆分字符串得到数组
- 截取函数:trim(), ltrim(), rtrim()
trim (字符串[,指定字符]):本身默认是用来去除字符串两边的空格(中间不行),但是也可以指定要去除的内容,是按照指定的内容循环去除两边有的内容:直到碰到一个不是目标字符为止
ltrim():去除左边的
rtrim():去除右边的
var_dump(trim($str)); 👉 string(8) "abcd e f"
- 截取函数:substr(), strstr()
substr (字符串,起始位置从0开始[,长度]):指定位置开始截取字符串,可以截取指定长度(不指定到最后)
strstr (字符串,匹配字符):从指定位置开始,截取到最后(✨可以用来去文件后缀名)
🏋🌰
$str = ' abcd e f ';
//字符串截取
echo substr($str,1,3),'<br/>';
echo strstr($str,'c');
🍎
abc
cd e f
- 大小转换函数:strtolower(), strtoupper(), ucfirst()
strtolower:全部小写
strtoupper:全部大写
ucfirst:首字母大写
$str = ' abcd e f ';
//字符串大小写
echo strtoupper($str),'<br/>';
echo ucfirst($str);
- 查找函数:strpos(), strrpos()
strpos (字符串,匹配字符):判断字符在目标字符串中出现的位置(首次)
strrpos (字符串,匹配字符):判断字符在目标字符串中最后出现的位置
🌰
$str = '123a234a3b2a';
//查找位置
echo strpos($str,'a'),'<br/>';
echo strrpos($str,'a');
🍎
3
11
- 替换函数:str_replace()
str_replace (匹配目标,替换的内容,字符串本身):将目标字符串中部分字符串进行替换
$str = '123a234a3b2a';
//字符串替换
echo str_replace('a','X',$str);
👉 123X234X3b2X
- 格式化函数: printf(), sprintf()
printf/sprintf (输出字符串有占位符,顺序占位内容..):格式化输出数据
$age = 50;
$name = 'TOM';
//格式化输出 ✨**sprintf**
echo sprintf("你好,今年我%d岁,我叫%s",$age,$name);
🍎
你好,今年我50岁,我叫TOM
- 其他:str_repeat(), str_shuffle()
str_repeat():重复某个字符串N次
str_shuffle():随机打乱字符串
//其他字符串函数
$str = 'abcdefg';
echo str_repeat($str,5),'<br/>';
echo str_shuffle($str);
🍎
abcdefgabcdefgabcdefgabcdefgabcdefg
cefbdag