PHP中字符串操作

字符串是PHP中重要的数据类型之一,属于标量类型。一个字符串是由一些列字符组成,每个字符等同于一个字节,字符串需要书写在定界符中。

常用的定界符

单引号、双引号、heredoc语法结构和nowdoc语法结构
单引号和双引号的区别

  1. 双引号解析变量,单引号不解析变量;
  2. \n换行  \r回车 \t水平制表符 \f换页 \$美元符号只能被双引号解析,\\反斜杠可以被单引号和双引号都解析, \’单引号只能被单引号解析

如果一段字符串中存在两个单引号或两个双引号,则需要使用转义符,即当内容和定界符冲突的时候需要使用转义符。
常用的转义符包括

\'单引号  \"双引号
<?php
    $str = 'He said \'Hello World\'';
    $str = "He said \"Hello World\"";
?>
\n换行  \r回车  \t水平制表符  \f换页  \$美元符号  \\反斜杠
<?php
    $str="1\n2\r3\t4\$5\\6\'78";
    echo $str;
?>

花括号{}的作用

当PHP解析器遇到一个$符号时,它会和其他很多解析器一样,去组合尽量多的标识以形成一个合法的变量名,这时可以用花括号{}来明确变量名的界限,将变量扩成一个整体来解析。

注意:花括号中间不要用空格
<?php
    $a = "hello";
    $c = "{$a} world"; // 个人建议这样写:$c = "{$a} world"; 不容易产生歧义
    $c = "${a} world";    
    echo $c."<hr/>";//hello world
?>

可以通过花括号{}对字符串中的指定字符做增删改查操作

  1. 字符串下标从零开始
  2. 花括号{}可以使用[]实现相同的操作
<?php
    $str='abcd';
    echo $str{3};//查 

    $str{3}='e';//注意只能是一个字符替换一个字符,一一对应,如果不是一个字符,只会取这个字符串的首字母
    echo $str;//改

    $str = 'hello';
    $str{3}='';
    echo $str;//删 但不影响原字符串的长度比如hello是五个字符,删除之后还是五个字符的长度

    $str = 'world';
    $str{5} = 's';
    echo $str;//增

    $str='你好';//当是汉语时需要知道,一个汉字是三个字符,若想输出一个汉字则需如下写法 
    echo $str{0};
    echo $str{1};
    echo $str{2};
?>

PHP中heredoc和nowdoc解析

heredoc语法结构

  1. 标识符只能保护字母、数字或下划线,并且必须以字母或下划线开始;
  2. 结束符前不能有任何内容,制表符和空格也不能有;
  3. PHP5.3之后可以将标识符用双引号括起来,其他的作用和双引号一样;
  4. 标识符可以自定义,一般的有EOT 、EOD 或EOF,通常大写;
  5. 标识符也可叫做标识名称。
<<<标识符 //开始
    内容...
标识符; //结束

nowdoc语法结构

nowdoc和单引号的作用一样,不解析变量和转义符,标识符需要放在单引号中

<<<'标识符' //开始
    内容...
标识符; //结束

例子

<?php
$id = 2;
$username = "queen";
$email = "123456@qq.com";
$str=<<<TABLE
<table border='1' width='80%'>
    <tr>
        <td>编号</td><td>用户名</td><td>邮箱</td>
    </tr>
    <tr>
        <td>1</td><td>许小珂</td><td>811637032@qq.com</td>
    </tr>
    <tr>
        <td>{$id}</td><td>{$username}</td><td>{$email}</td>
    </tr>
</table>
TABLE;
echo $str;

//通过nowdoc的写法
$str=<<<'ECO'
<h1>123</h1>
<p>{$id}</p>
ECO;
echo $str;
?>

PHP中字符串相关数据类型转换

其他类型转换为字符串

自动转换

  1. 数值类型转换为字符串是数值本身;
  2. 布尔类型转换为字符串,true转换为1,false转换为空字符串;
  3. NULL转换为字符串为空字符串;
  4. 数组转换为字符串型,用echo语句输出,转换为Array,并会出现notice提示;
  5. 资源转换为字符串输出的结果是 Resource id #3;
  6. 对象不能直接转换为字符串。

临时转换

通过(string)或者strval()关键字进行转换

<?php
$var=123;
$var=12.3;
$var=true;
$var=false;
$var=NULL;
$var=array(1,2,3);
$var= new Stdclass();
$res=(string)$var;
var_dump($res);
?>

永久转换

通过settype($var,type)设置变量的类型

gettype()得到变量的类型

字符串转换为数值型

取合法数字,如果不是以合法数字开始,转换成0

字符串转换为布尔类型

空字符串、字符串为’0’、整型的0、浮点型的0.0、空数组array()和空值NULL转换为false,其他的转换为true。