美文网首页
PHP操作字符串

PHP操作字符串

作者: 简简天天 | 来源:发表于2019-12-25 23:06 被阅读0次

字符串简介

  • 字符串是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
<?php
// 相当于双引号
$username="king";
echo <<<EOF
    <h1>I l\no\tv\re y\\ou {$username}</h1>
EOF;

echo <<<"EOF"
    <h1>I l\no\tv\re y\\ou {$username}</h1>
EOF;

// 相当于单引号
echo <<<'EOF'
    <h1>I l\no\tv\re y\\ou {$username}</h1>
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):返回小写之后的字符串 strtoupper(string):返回大写之后的字符串
ucfirst(string):字符串的单词的首字母大写 ucwords(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(char):得到指定字符的ASCII chr(ascii):根据ASCII得到指定的字符

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

字符串的截取

  • substr(string,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(string,replace,start[,length]):替换字符串的子串

$str = '1@qQ.ccCom';
echo substr_replace($str,'2',0,1); //2@qQ.ccCom

比较字符串的大小

strcmp(string1,string2):比较两个字符串的大小,比较的时候区分大小写
strcasecmp(string1,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(string,search[,offset]):在指定字符串中查找目标字符串第一次出现的位置,区分大小写 stripos(string,search[,offset]):忽略大小写的去查找,i---ignore
strrpos(string,search[,offset]):在指定字符串中查找目标字符串最后一次出现的位置,区分大小写 strripos(string,search[,offset]):忽略大小写的去查找最后一次出现的位置

$str = '1@qQ.ccCom';
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(string,search[,before_needle]):查找字符串的首次出现,返回的是字符串,区分大小写 stristr(string,search[,before_needle]):忽略大小写的去查找,返回字符串
strrchr(string,search):查找指定字符在字符串中的最后一次出现
str_replace(search,replace,string):在指定字符串中查找另外一个字符串,找到之后将其替换成指定字符串,区分大小写 str_ireplace(search,replace,string):忽略大小写的去查找并替换

$str = '1@qQ.ccCom';
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);//1@qq.ccCom
echo str_ireplace('qq','qq',$str); //1@qq.ccCom
  • 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(string[,charlist]):默认过滤字符串两端的空格,也可以过滤指定字符串
ltrim(string[,charlist]):过滤字符串左端
rtrim|chop(string[,charlist]):过滤字符串右端

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

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

$a = '<h1>123</h1>';
echo strip_tags($a);//123

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

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

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

<?php
$str = "A 'quote' is <b>bold</b>";

// 输出: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str);

// 输出: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str, ENT_QUOTES);
?>

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

<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>

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

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

加密

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

字符串分隔成数组

  • explode(delimiter,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(delimiter,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常用函数

    字符串操作 查找字符串出现位置$str = strpos("YouLovePhp!","Php");# 输出7 替...

  • #python入门5#高级特性--切片

    切片类似 php的截取(字符串/数组截取) 常用于list, tupple,字符串的操作 L = ['Michae...

  • PHP字符串操作

    1.字符串以什么开头 preg_match('/^MP/', 'Mwf');

  • PHP字符串操作

    憋了好久,终于迎来第一篇简书,今天就写写在PHP开发中经常用到的操作之一——PHP字符串操作一、替换 二、删除字符...

  • PHP 字符串操作

    碎碎念 记录一些PHP中字符串的学习记录。 双引号和单引号的区别 双引号可以用来解析变量,单引号不解析变量。所以,...

  • PHP操作字符串

    字符串简介 字符串是PHP中重要的数据类型之一,属于标量类型 一个字符串就是由一些列的字符组成,每个字符等同于一个...

  • PHP学习笔记 - 进阶篇(4)

    字符串操作 字符串介绍 PHP开发中,我们遇到最多的可能就是字符串。 字符串变量用于包含字符串的值。 一个字符串 ...

  • PHP 字符串处理函数

    字符串在PHP中使用的非常频繁,操作字符串的函数也非常多,这里总结一些常用的字符串处理函数,以便复习查阅。 str...

  • php字符串基本操作

    字符串操作 在php开发过程中有些基础知识一时想不起来,如果同事间合作略显尴尬,小编整理了一些对字符串的基本操作的...

  • PHP字符串操作整理

    字符串的概念: 一个字符串string就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能...

网友评论

      本文标题:PHP操作字符串

      本文链接:https://www.haomeiwen.com/subject/fenfoctx.html