字符串
字符串定义语法
1、单引号字符串
2、双引号字符串
*引号方式定义字符串比较适合那些比较短(不超过一行)或者没有结构要求的字符串。如果有结构要求,或者内容超过一行,可以使用以下两种结构定义。
3、nowdoc字符串:
没有单引号的单引号字符串【不支持转义】
$str = <<<'边界符'
字符串内容
边界符;
4、heredoc字符串:
没有双引号的双引号字符串【支持转义】
$str = <<<边界符
字符串内容
边界符;
heredoc和nowdoc比引号字符串还是要区别多一点,见下图:
如上图,查看html源码,发现它们完全原封不动100%的尊照字符串定义时的格式。
字符串转义
转义:在计算机通用协议中,有一些特定方式定义的字母字符,系统会特定处理。通常都是用\+字母(单词)。
单引号、双引号字符串区别:
1、*单引号字符串只能识别\'转义符,其他转义符不能识别;【可理解为:单引号字符串不支持转义】;
*双引号字符串识别所有转义符,除了\'转义符。(因为单引号'可以直接出现在双引号字符串中)【可理解为:双引号字符串支持转义】
2、双引号字符串因为可以转义$符号(可识别$符号),所以双引号字符串可以解析变量,而单引号字符串不可以。
上图代码清晰显示单引号、双引号字符串区别。即双引号可以解析$变量。
双引号中变量识别的原则:
1系统可以清晰的区分变量本身:不要让系统难以区分,例如
例如上图代码str3中双引号中出现的是$adfg而不是$a。所以系统报错没有定义$adfg。而str2中系统可以轻易区分$a,因此得以正确解析变量。
2给变量加一对大括号,例如:str3="abce{$a}dfg";则系统可以直接解析$a。
结构化定义字符串变量的规则:
1、结构化定义字符串的边界符有条件:
1.1上边界符后面不能跟任何内容。
1.2下边界符必须顶格:在本行最左边。
1.3下边界符后面只能跟英文分号,不能跟任何其他内容。
2结构化定义字符串的内部(边界符之间)的所有内容都是字符串本身、
字符串长度问题
1基本函数strlen():得到字符串长度(字节)
2多字节字符串长度问题:包含中文
3多字节字符串扩展模块:mbstring扩展(mb:multi byte)
首先需要加载php的目标string扩展:打开php.ini修改设置启动该扩展:
存盘,然后重启web服务器。
使用mb_strlen函数获取中文字符个数,效果如下:
注意:使用mb_strlen必须指定字符集'utf-8'以获取中文正确的字符个数。如果不指定,默认是英文字符集(ascii),那么效果就和strlen函数一样了。效果如上图演示代码。
echo '多字节字符串长度函数演示<br>';
/* 设置内部字符编码为 UTF-8 */
mb_internal_encoding("UTF-8");
/* 显示当前的内部字符编码*/
echo mb_internal_encoding().'<br>';
$str1='我爱你中国';
echo $str1.'<br>字符个数='.mb_strlen($str1);
/*如果之前没有使用mb_internal_encoding("UTF-8");指定正确字符编码
就必须在函数中指定编码,写成mb_strlen($str1,'utf-8');才会得到正确结果,否则按英文字符编码计算*/
字符串相关函数 参考手册
1、转换函数:implode【数组合并成1字符串】,explode【将字符串按分割字符分割成数组】,str_split【按长度分割字符串为数组】
implode(连接字符,数组):将数组中的元素添加连接字符合并成一个字符串。示例如下:
$array = array('lastname', 'email', 'phone');
$res = implode(",", $array);
echo $res.'<br>'; // 输出lastname,email,phone
explode(分割字符,目标字符串):将字符串按照分割字符进行分割,变成数组。示例如下:
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);//用空格分隔
var_dump($pieces);
/*输出
array (size=6)
0 => string 'piece1' (length=6)
1 => string 'piece2' (length=6)
2 => string 'piece3' (length=6)
3 => string 'piece4' (length=6)
4 => string 'piece5' (length=6)
5 => string 'piece6' (length=6)
*/
str_split(字符串,分割长度):将字符串按分割长度转换为数组,示例如下:
$str = "Hello!";
$arr1 = str_split($str);//不指定分隔长度,则默认为1个字符
$arr2 = str_split($str, 2);
print_r($arr1);//输出Array ( [0] => H [1] => e [2] => l [3] => l [4] => o [5] => ! )
echo '<br>';
print_r($arr2);//输出Array ( [0] => He [1] => ll [2] => o! )
echo '<br>';
2、截取函数:trim,ltrim,rtrim
trim(字符串[,过滤字符]):默认去除首尾空格。也可以去除首尾两边的指定过滤字符。点句首链接见参考手册详细例程。
$str=' adc de fg hijk ';
echo trim($str);//输出adc de fg hijk
ltrim():去除左边的。
rtrim():去除右边的
3、截取函数:substr(),strstr()
☆substr(): 返回字符串的子串
格式:substr ( string $string
, int $start
[, int $length
] ) : string
返回字符串 string
由 start
和 length
参数指定的子字符串。
参数:
【string】:
输入字符串。必须至少有一个字符。
【start】:
如果 start
是非负数,返回的字符串将从 string
的 start
位置开始,从 0 开始计算。例如,在字符串 “abcdef” 中,在位置 0 的字符是 “a”,位置 2 的字符串是 “c” 等等。
如果 start
是负数,返回的字符串将从 string
结尾处向前数第 start
个字符开始。
如果 string
的长度小于 start
,将返回 FALSE
。
【length】:
如果提供了正数的 length
,返回的字符串将从 start
处开始最多包括 length
个字符(取决于 string
的长度)。
如果提供了负数的 length
,那么 string
末尾处的 length
个字符将会被省略(若 start
是负数则从字符串尾部算起)。如果 start
不在这段文本中,那么将返回 FALSE
。
如果提供了值为 0,FALSE
或 NULL
的 length
,那么将返回一个空字符串。
如果没有提供 length
,返回的子字符串将从 start
位置开始直到字符串结尾。
以下为一些示例:
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
$rest = substr("abcdef", 0, -1); // 返回 "abcde"
$rest = substr("abcdef", 2, -1); // 返回 "cde"
$rest = substr("abcdef", -3, -1); // 返回 "de"
strstr(字符串,匹配字符):从指定位置开始,截取到最后(可以用来取文件扩展名)
4大小写转换函数:
strtolower(字符串):转小写
strtouppper(字符串):转大写
ucfirst(字符串):如果字符串首字母是字母,转大写
注意如上图代码,$str字符串首字符是空格,不是字母。所以ucfirst没起效。
ucwords(字符串,[分隔符]):将字符串中每个单词的首字母转换为大写(如果首字符是字母才起效)。详细例程见参考手册。
5、查找函数
strpos():查找字符串首次出现的位置(位置计数从0开始)
strrpos():计算指定字符串在目标字符串中最后一次出现的位置(位置计数从0开始)
6、替换函数
str_replase(查找目标,替换内容,字符串):将目标字符串中部分字符串进行替换。
7、格式化函数
printf():/sprintf():按指定占位符格式输出格式化字符串(类似C语言printf)。占位符见sprintf()参考手册。
8、其他
str_repeat():重复某个字符串N次。
str_shuffle():随机打乱字符串。