在底层,字符串是以字符数组的形式保存的
$a = '123';
echo $a[0]; // 1
echo strlen($a); // 3
字符串简介
基本概念
- 一个字符串就是由一系列的字符组成,其中每个字符等同于一个字节
- 字符串最大可以达到 2GB
- 一个字符串可以用 4 种方式表达
代码示例
echo $a = 'abc';
echo $b = '123';
echo $c = '哈哈哈';
echo $d; // Notice: Undefined variable: d
echo "d"; // d
字符串表达方式
一个字符串可以用 4 种方式表达:
- 单引号
- 双引号
- heredoc 语法结构(类似于双引号)
- nowdoc 语法结构(类似于单引号)
heredoc与Nowdoc LINK
<<<
运算符之后加标识符HTMLCON
(自定义),标识符大写,最后用该标识符结束- 标识符不加
''
就是heredoc,标识符加''
就是nowdoc - heredoc和nowdoc一般用于返回大段html代码
- heredoc类似于双引号,nowdoc类似于单引号
$info = array('name'=>'张三','age'=>18);
$str = <<<HTMLCON
<h1>hello word~{$info['name']}</h1>
HTMLCON;
echo $str;
转义字符
反斜杠是一个转义字符。 转义字符将特殊字符转换为字符串字符
单引号
- 要表达一个单引号自身,需在它的前面加个反斜线
\'
来转义 - 要表达一个反斜线自身,则用两个反斜线
\\
// 想要打印单引号
$str1 = '\'';
echo $str1,'<br>'; // '
// 想要打印反斜杠
$str1 = '\\';
echo $str1,'<br>'; // \
双引号
双引号会对以下特殊的字符进行解析(常用)
\"
表示"
双引号\'
表示'
单引号\\
表示\
\r
表示回车\n
表示换行。n 的意思是 newline。\t
表示缩进。t 的意思是 tab。
// 想要打印双引号
$str1 = "\"";
echo $str1,"<br>"; // "
// 想要打印\
$str1 = "\\";
echo $str1,"<br>"; // \
// 想要打印\n
$str1 = "\\n";
echo $str1,"<br>"; // \n
变量解析
基本用法
- 双引号和heredoc能解析变量
- 单引号和nowdoc不能解析变量
- 双引号解析变量时,如果变量有特殊字符或者是数组,则需要{}括起来
- 双引号解析变量时,如果变量后面有(),则认为调用函数
变量解析示例
$age = 18;
$str1 = "我今年 $age 岁";
$str2 = '我今年 $age 岁';
echo $str1,"<br>"; // 我今年 18 岁
echo $str2,"<br>"; // 我今年 $age 岁
$info = array('name'=>'张三','age'=>18);
$str = "我今年 {$info['age']} 岁";
echo $str;
字符串中调用函数(函数解析)
function test(){
return 'hello';
}
$fun_name = 'test';
echo "$fun_name"; // 'test'
echo "$fun_name()"; // 'test()'
echo "{test()}"; // '{test()}'
echo "{$fun_name()}"; // 'hello' 此处调用函数
/*
当php去执行一个双引号的内容时,如果它发现有 $变量 的存在
1.首先去找这个 $变量 对应的值 'test'
2.如果$变量后有()且用{}包起来,会认为要调用函数,即 test() 如果没有这个函数 报错
*/
单双引号速度比较
单引号速度快
- 单引号速度快不需要解析变量,优先使用
''
- 如果返回大段html代码,优先使用
heredoc
方式 - 如果需要拼接很多变量的 sql 语句,推荐使用
""
字符串拼接(并置运算符)
字符串拼接用. 不仅可以拼接字符串,还可以把整形转换成字符串并拼接在一起
$a = "hello";
$b = "world";
$c = $a.$b;
echo $c; // helloworld
$d = 111;
$e = $d.$c;
echo $e; // 111helloworld
. 和 ,
在打印时运行速度的比较
echo "hello"."world"; // 先进性字符串拼接运算 然乎再打印 比较慢
echo "hello","world"; // 相当于直接打印两次 快一些
查字符串长度函数
- strlen() 返回字符串的长度
// strlen 按照字节来计
$str1 = "hello";
$str2 = "he llo";
$str3 = "中国";
echo strlen($str1),"<br>"; // 5
echo strlen($str2),"<br>"; // 6
echo strlen($str3),"<br>"; // 6 utf-8编码,1个中文占3个字节
查找字符位置函数
- strpos() 返回字符串在另一字符串中第一次出现的位置(大小写敏感)
- stripos() 返回字符串在另一字符串中第一次出现的位置(大小写不敏感)
- strripos() 查找字符串在另一字符串中最后一次出现的位置(大小写不敏感)。
- strrpos() 查找字符串在另一字符串中最后一次出现的位置(大小写敏感)。
$str = "hello";
echo strpos($str, "h"); // 0
// 查找 "php" 在字符串中第一次出现的位置:
echo strpos("I love php, I love php too!","php"); // 7
字符串替换函数
- str_replace() 替换字符串中的一些字符(大小写敏感)
- str_ireplace() 替换字符串中的一些字符(大小写不敏感)
$str = "hi,fuck,fucker";
echo str_replace("fuck", "f**k", $str); // hi,f**k,f**ker
- strtr() 替换一批字符串(不同的字符使用不同的替换规则)
- substr_replace() 把字符串的一部分替换为另一个字符串。
// 替换一批字符串
$str = "男人,女人,男孩,女孩";
echo strtr($str,array("男"=>"女","女"=>"男")); // 女人,男人,女孩,男孩
提取子字符函数(双字节)
substr() 截取字符串的一部分并返回
如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
$str = "hello,world";
echo substr($str, 0,5); // 0开始到5(不包括),截5个字节 hello
echo "<br>";
echo substr($str,0,-6); // 0开始到-6(不包括),截5个字节 hello 负数就是从后往前数
echo "<br>";
echo substr($str,-11,-6); // -11开始到-6(不包括),截5个字节 hello
分割 / 连接字符串函数
$str = "linux,windows,mac";
$arr = explode(",",$str); // Array ( [0] => linux [1] => windows [2] => mac ) 把字符串分割成数组
echo "<br>";
echo implode($arr,","); // linux,windows,mac 把数组连成字符串