PHP操作字符串

字符串简介

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

定界符

单引号
双引号
heredoc语法结构
nowdoc语法结构

转义字符

image.png
$username = 'king';
echo $username; // king
echo "$username"; // king
echo '$username'; // $username
/**
 * 双引号和单引号的区别
 * 双引号解析变量,单引号不解析变量,单引号的执行效率更高
 * 双引号解析所有的转义符,单引号直解析\\和\'这两种转义符
 */
// 当内容和定界符冲突的时候需要使用转义符
$str = 'this is king\'s PHP,He said "I\'m fine"'; // this is king's PHP,He said "I'm fine"
echo $str;
$str = "He said \"I'm fine\""; // He said "I'm fine"
echo $str;
echo PHP_EOL;
$str="1\n2\r3\t4\\5\$6\"78";
echo $str;
echo PHP_EOL;
$str='1\n2\r3\t4\\5\$6\'78';
echo $str; // 1\n2\r3\t4\5\$6'78

花括号{}作用

  • 将变量扩展成整体
    当php解析器遇到一个美元符号($)时,它会和其他很多解析器一样,去组合尽量多的标识形成一个合法的变量名。可以用花括号来明确变量名的界线,将变量扩展成一个整体来解析。
$username = 'king';
echo "$username"; // king
echo PHP_EOL;
echo "我的名字是$usernames"; // Notice: Undefined variable: usernames in D:\learning\index.php on line 5
echo PHP_EOL;
echo "我的名字是$username s";// king s
echo PHP_EOL;
echo "我的名字是{$username}s";//kings
echo PHP_EOL;
echo "我的名字是${username}s";//kings
echo PHP_EOL;
echo "我的名字是{ $username }s";//{ king }s
echo PHP_EOL;
echo "我的名字是{ $username}s";//{ king}s
echo PHP_EOL;
echo "我的名字是{$username }s";//kings
  • 对字符串中的指定字符做增删改查
    字符串下标从0开始
    可以使用[]实现相同的操作
$str = "abcdef";
echo strlen($str); // 6
echo PHP_EOL;
// 字符串下标从0开始,查询
echo $str{0}; // a
echo $str[0]; // a
echo $str{2}; // c
// 只能用一个字符修改一个字符
$str{2}="opp";
echo $str;//abodef
// utf8中一个中文字符
$s = '你好';
echo $s{0};
echo $s{1};
echo $s{2};//你
// 删除
//$str{1} = ""; // Warning: Cannot assign an empty string to a string offset
echo $str;//abodef
echo strlen($str);//6
//$str{1} = null; // PHP Warning:  Cannot assign an empty string to a string offset
echo $str;//abodef
echo strlen($str);//6
$str{30} = 'g';
echo $str;//abodef g
echo strlen($str); // 31
echo PHP_EOL;
$str="3456";
echo $str{mt_rand(0,strlen($str)-1)}; // 随机取一个

heredoc和nowdoc语法结构

image.png
  • 标识名称只能包含字母、数字、下划线,并且必须以字母和下划线开始
  • 结束符前不能有任何内容,像制表符和空格都不可以


    image.png
I l\no\tv\re y\\ou {$username}
EOF;

echo <<<"EOF"
    

I l\no\tv\re y\\ou {$username}

EOF; // 相当于单引号 echo <<<'EOF'

I l\no\tv\re y\\ou {$username}

EOF;

其他类型转换成字符串型

  • 数值型转换成字符串型
  • 布尔型转换成字符串型
  • NULL转换成字符串型
  • 数组转换成字符串
  • 对象转换成字符串
  • 资源转换成字符串
    (1)自动类型转换
/**
 * 自动类型转换
 * 数值型->数值本身
 * true->1
 * false->空字符串
 * null->空字符串
 */
echo 123;//123
echo 1.2;//1.2
echo true;//1
echo false;//空字符串
echo null; //空字符串
/**
 * 数组->Array
 * 资源->Resource id #数字
 * 对象不能直接转换成字符串
 */
echo [1,2,3];// Array PHP Notice:  Array to string conversion
echo fopen('test.php','r'); // Resource id #5
$obj = new stdClass();
var_dump($obj);
/**
 * class stdClass#1 (0) {
}
 */
//echo $obj; // PHP Catchable fatal error:  Object of class stdClass could not be converted to string

(2)强制类型转换

  • 临时转换
/**
 * 强制类型转换
 * 临时转换(string) strval()两种形式
 * 永久转换
 */
$var = 123;//123
$var =  1.2;//1.2
$var = true;//1
$var =  false;//空字符串
$var = null; //空字符串
$var = [1,2,3];// Array PHP Notice:  Array to string conversion string(5) "Array" 具体数组的值
//$var = fopen('test.php','r'); // string(14) "Resource id #5"  resource(5) of type (stream)
//$var = new stdClass(); // //PHP Catchable fatal error:  Object of class stdClass could not be converted to string
$res = (string)$var;
$res = strval($var);
var_dump($res,$var);
  • 永久转换
/**
 * 强制类型转换
 * 临时转换(string) strval()两种形式
 * 永久转换,设置变量类型settype gettype
 */
$var = 123;
settype($var,'string');
echo gettype($var);//string

字符串转换成其他类型

// 取合法数字,如果不是以合法数字开始,转换成0
/*echo 1+"3king"; // 4
echo 1+"1.3a"; // 2.3
echo 1+"2e2"; //201
echo 1+"true";//1*/

// 字符串转换成布尔类型的规律,空字符串或者空字符串"0"转换成false
$res = ''; //false
$res = ' '; // true
//$res = 0; //false
//$res = '0'; // false
//$res = 0.0; //
//$res = '0.0'; // true
//$res = null;//false
//$res = "false"; //true
//$res = []; //false
if($res){
    echo "$res 是真的";
}else{
    echo "$res 是假的";
}

字符串函数库的使用

字符串长度、字符串查找、字符串大小写转换、字符串截取、字符串ASCII码、加密、比较、拆分、合并、格式化字符串、其他常用

字符串长度

strlen($string):得到字符串长度

// 检测变量是否是字符串
$str = "Hello";
var_dump(is_string($str)); // bool(true)
//得到字符串的长度
var_dump(strlen($str)); // 5

字符串大小写

strtolower(string):返回大写之后的字符串
ucfirst(string):单词的首字母大写
lcfirst($string):字符串的单词的首字母小写

$str = "Hello";
//转换成小写
echo strtolower($str);//hello
// 转换成大写
echo strtoupper($str);//HELLO
//首字母大写
echo ucfirst($str);//Hello
$name = 'i love you';
// 所有单词首字母大写
echo ucwords($name); //I Love You
// 字符串的首字母小写
echo lcfirst($str); // hello

字符ASCII

ord(ascii):根据ASCII得到指定的字符

echo ord('a'); // 97
echo ord('z'); // 122
echo ord('A'); //65
echo ord('Z'); // 90
echo chr(122); // z

字符串的截取

  • substr(start[,$length]):截取字符串
$str = 'abcdef';
echo $str{0};//a
// 如果start为负值,代表的位置
echo substr($str,0,1); // a
echo substr($str,2);//cdef
echo substr($str,-2,2);//ef
echo substr($str,-4,-2);//cd
echo substr($str,0,-3);//abc
  • mb_substr 中文截取,mb,多字节的意思
$str = '我ai中国';
echo mb_substr($str,0,4); // 我ai中

substr_replace(replace,length]):替换字符串的子串

$str = '[email protected]';
echo substr_replace($str,'2',0,1); //[email protected]

比较字符串的大小

strcmp(string2):比较两个字符串的大小,比较的时候区分大小写
strcasecmp(string2):忽略大小写的比较字符串的大小

echo strcmp('a','b'); // -1
echo strcmp('a','A');//1
echo strcmp('aa','aA'); // 1
echo strcmp('a','a'); //0
echo strcasecmp('a','A');//0

字符串查找

strpos(search[,string,offset]):忽略大小写的去查找,i---ignore
strrpos(search[,string,offset]):忽略大小写的去查找最后一次出现的位置

$str = '[email protected]';
echo strpos($str,'@');//1
echo strpos($str,'Q');//3
echo strpos($str,'qq');//false 空字符串
echo strpos($str,'qQ');//2
echo stripos($str,'Q');//2
echo strrpos($str,'c');//6
echo strripos($str,'c');//7

strstr|strchr(search[,string,before_needle]):忽略大小写的去查找,返回字符串
strrchr(search):查找指定字符在字符串中的最后一次出现
str_replace(replace,search,string):忽略大小写的去查找并替换

$str = '[email protected]';
echo strstr($str,'@');//@qQ.ccCom
echo strstr($str,'Q');//Q.ccCom
echo strchr($str,'qq');//false 空字符串
echo strchr($str,'qQ');//qQ.ccCom
echo stristr($str,'Q');//qQ.ccCom
echo strrchr($str,'c');//cCom
echo str_replace('qQ','qq',$str);//[email protected]
echo str_ireplace('qq','qq',$str); //[email protected]
  • preg_match_all 正则匹配所有
$str = 'php is very php js';
echo preg_match_all('/php|js/',$str,$arr); // 3
print_r($arr);
Array
(
    [0] => Array
        (
            [0] => php
            [1] => php
            [2] => js
        )

)
  • preg_match匹配第一个
$str = 'php is very php js';
echo preg_match('/php|js/',$str,$arr); // 1
print_r($arr);
Array
(
    [0] => php
)

字符串过滤

trim(charlist]):默认过滤字符串两端的空格,也可以过滤指定字符串
ltrim(charlist]):过滤字符串左端
rtrim|chop(charlist]):过滤字符串右端

$str = ' com ';
echo trim($str); //com
echo ltrim($str);//com
echo trim($str,' c'); //om

strip_tags(allowTag]):过滤字符串中的HTML标记

$a = '

123

'; echo strip_tags($a);//123

addslashes($string):使用反斜线引用字符串中的特殊字符

$str = "Is \your name O'reilly?";
// 输出: Is your name O\'reilly?
echo addslashes($str);

htmlentities(flag=ENT_COMPAT]):将所有字符转换成HTML实体

bold";

// 输出: A 'quote' is <b>bold</b>
echo htmlentities($str);

// 输出: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>

htmlspecialchars(flag=ENT_COMPAT]):将字符串中的特殊字符转换成HTML实体

Test", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>

nl2br($string):将字符串中的\n用
替换

echo nl2br("foo isn't\n bar");
/**
 * foo isn't
bar */

加密

md5(string):计算字符串的sha1的散列值,返回40位长度的字符串
均为不可逆的加密

字符串分隔成数组

  • explode(string):使用一个字符串分割另一个字符串
$str = 'I love you';
print_r(explode(' ',$str));
Array
(
    [0] => I
    [1] => love
    [2] => you
)
  • preg_split正则分隔:通过一个正则表达式分隔字符串
$str = '2020-01_05';
print_r(preg_split('/-|_/', $str));
Array
(
    [0] => 2020
    [1] => 01
    [2] => 05
)
  • str_split:按长度分隔
$str = '12345678910';
print_r(str_split($str, 3));
Array
(
    [0] => 123
    [1] => 456
    [2] => 789
    [3] => 10
)

数组合并成字符串

implode|join(array):以指定分隔符将数组中的键值连接成字符串

  • implode — 将一个一维数组的值转化为字符串
$arr = array('I', 'love', 'you');
$str = implode(" ", $arr);
echo $str; // I love you
  • join implode的别名

字符串替换

  • str_replace 字符串替换
$str = 'php is very php';
echo str_replace('php','linux',$str); // linux is very linux
  • preg_replace 正则替换
$str = 'php is very php js';
echo preg_replace('/php|js/','linux',$str); // linux is very linux linux

你可能感兴趣的:(PHP操作字符串)