PHP字符串操作基础

第1章 字符串基础知识

1-1 单引号与双引号声明字符串的区别

1-1-1 单引号

// 1.单引号
echo 'Hello world!'; echo '<hr>';
echo 'That\'s good!'; // 单引号中的字符串如出现了单引号,需要转义
echo '<hr>';
echo '生活就像海洋\r\n';
echo '<hr>';
// 如果只想输出反斜线,不需要转义
echo 'C:\temp\'hello.php'; // 单引号会被转义
echo '<hr>';
echo 'C:\temp\\hello.php'; // 将反斜线本身进行转义
echo '<hr>';
$name = 'test';
echo '$name';
echo '<hr>';

执行结果:

Hello world!
That's good!
生活就像海洋\r\n
C:\temp'hello.php
C:\temp\hello.php
$name

总结:

  • 可以声明普通的字符串
  • 只能转义单引号和反斜线
  • 不能解析变量

1-1-2 双引号

// 2.双引号

// 可以声明普通字符串
echo "Hello world!"; echo '<hr>';
// 字符串中出现单引号,不需要转义
echo "That's good!";
echo '<hr>';
// 如字符串出现了双引号,需要转义
echo "PHP中文网\"www.php.cn\"";
echo '<hr>';
// 双引号中的特殊字符会被解析
echo "C:\php\demo.php"; echo '<hr>';
echo "C:\temp\demo.php"; echo '<hr>';
$name = 'jackson';
// 双引号中的变量会被解析
echo "He is $name";
echo '<hr>';

执行结果:

Hello world!
That's good!
PHP中文网"www.php.cn"
C:\php\demo.php
C: emp\demo.php
He is jackson

总结:

  • 声明一个普通字符串
  • 转义全部的特殊字符
  • 解析变量

1-2 heredoc和nowdoc语法结构的区别与联系

<?php
// 1.heredoc语法结构
/**
 * 1.可解析变量
 * 2.含双引号不需要转义
 */
$name = 'PHP中文网';
echo "www.php.cn $name \r\n";
echo '<hr>';

echo <<<"EOA"
www.php.cn "Just so-so" $name \r\n
EOA;
echo '<hr>';

// 2.nowdoc 语法结构 PHP 5.3+
echo 'www.baidu.com \'众里寻他千百度\'';
echo '<hr>';
echo <<<'EDO'
www.baidu.com '众里寻他千百度'
<form action="index.php" method="get">
用户名:<input type="text">
</form>
EDO;

执行结果:

www.php.cn PHP中文网
www.php.cn "Just so-so" PHP中文网
www.baidu.com '众里寻他千百度'
www.baidu.com '众里寻他千百度'

在这里插入图片描述

1-3 heredoc与nowdoc初始化局部变量与类属性

<?php
// 用heredoc和nowdoc初始化函数变量和类属性

function welcome($lang='PHP')
{
    $study = <<<"STU"
我喜欢的编程语言是:$lang
STU;

    // nowdoc语法结构不能解析变量 不能处理特殊字符
    $study = <<<'STU'
我喜欢的编程语言是:PHP
STU;

static $hello = <<<"EOD"
欢迎来到PHP中文网"www.php.cn" \r\n
EOD;

static $hello2 = <<<'EOD'
欢迎来到PHP中文网"www.php.cn" \r\n
EOD;
return $hello.$study;

}
echo welcome('JAVA');
echo '<hr color="color">';
class Student
{
    public $name = 'zhangsan';
    public static $alias = <<<"NAME"
My name is: Zhang san <hr>
NAME;
    const COUNTRY = <<< COUN
I'm fine. Thank you! And you?
COUN;
}
echo (new Student())->name; echo '<hr>';
echo Student::$alias; echo '<hr>';
echo Student::COUNTRY; echo '<hr>';

执行结果:
在这里插入图片描述

1-4 变量解析两种语法与实例详解

<?php
$siteName = 'PHP中文网';
//$books = ['php', 'java', 'python'];
$books = ['course'=>'php', 'java', 'python'];

echo "网站名称是:$siteName";
echo '<hr>';
// echo "我负责的课程为 $books[0]";
// echo "我负责的课程为 $books['course']";
// 简单语法:$var 复杂语法:{$var}
echo "我负责的课程为 {$books['course']}";
echo '<hr color="red">';

class Web
{
    public $website = 'PHP中文网';
    //public static $domain = 'www.php.cn';
    public static $domain = 'domain';
    //const App = '我的应用';
    const App = 'app';
}
$domain = 'www.php.cn';
$app = '我的应用';
echo (new Web())->website; echo '<hr>';
echo Web::$domain; // 普通方法
echo '<hr>';
// 复杂方法,间接访问
echo "${Web::$domain}";
echo '<hr>';
echo "${Web::App}";

执行结果:
在这里插入图片描述

1-5 字符串的增删改查操作

<?php
// 字符串的增删改查:将字符串看作数组
$domain = 'http://www.php.cn';

// 查询
echo $domain[3]; echo '<hr>';
echo $domain{3}; echo '<hr>';

// 新增
echo '字符串长度为'.strlen($domain); echo '<hr>';
echo $domain;
$domain{17} = '/'; echo '<hr>';
echo $domain;

// 更新
$domain{17} = '?';
echo '<hr>';
echo $domain;

// 删除
//$domain[3] = '';
$domain[3] = null;
echo '<hr>';
echo $domain;
echo '<hr>';
echo '字符串长度为'.strlen($domain); echo '<hr>';

执行效果:
在这里插入图片描述

第2章 字符串函数精讲

2-1 子串处理substr及相关函数

<?php
$siteName = 'PHP中文网';
$color = 'red';

/**
 * heredoc需要注意的几点:
 * 1.换行,空格会被保留
 * 2.因为不需要对引号进行转义,适合输出大段的HTML代码
 * 3.变量可以自动解析,适合于模板输出
 * 4.如果heredoc或nowdoc与其它字符串拼接,结尾不要加分号
 */

$html = <<<"HTML"
<h3 style="color: $color">$siteName</h3>
HTML
.'www.php.cn';

echo $html;
echo '<hr>';
// substr():获取子串的内容

// 1.获取子串:substr($str, $start, $length)
$website = 'www.baidu.com';
echo substr($website, 0, 5),'<hr>'; // www.b
echo substr($website, -3, 3),'<hr>'; // com

// 2.替换子串:substr_replace()
echo substr_replace($website, 'php', 6, 2),'<hr>'; // www.baphpu.com
// 将子串长度设置为0,实现无删除的插入
echo substr_replace($website, '_edu', 9, 0),'<hr>'; // www.baidu_edu.com
// 设置空子串,实现插入式的删除
echo substr_replace($website, '', 6, 2),'<hr>'; // www.bau.com
// 在起始位置插入字符
echo substr_replace($website, 'website: ', 0, 0),'<hr>'; // website: www.baidu.com

// 3.substr_count():查询字串出现在字符串中的频率(次数)
$str = "我家后院有两棵树,一棵是枣树,另一棵也是枣树";
echo substr_count($str, '树'),'<hr>'; // 3
echo mb_substr_count(mb_substr($str, 0, 20, 'utf-8'), '树'),'<hr>'; // 2

// 4.substr_compare($str,$str1)比较子串
// 0:相等 <0:第一个子串小于第二个子串 >0:第一个子串大于第二个子串
echo substr_compare('www.php.cn', 'www.php.cn',0),'<hr>'; // 0
echo substr_compare('www.php.cn', 'www.baidu.com',0),'<hr>'; // 1
echo substr_compare('php.cn', 'www.php.cn', 0),'<hr>'; // -1
echo substr_compare('www.php.cn', 'php.cn', 4),'<hr>'; // 0

2-2 字符串检索函数strpos()和strstr()

<?php
/**
 * strpos():获取子串的位置,子串检索函数,根据内容查找索引
 */
$domain = 'www.baidu.com';
echo strpos($domain, 'bai'),'<hr>'; // 4
echo strpos($domain, 'd', 5),'<hr>'; // 7

$siteName = "runoob菜鸟教程";
echo strpos($siteName, '菜'),'<hr>'; // 6
echo strpos($siteName, '教'),'<hr>'; // 12
// 使用多字节安全函数mb_,mbString开启
echo mb_strpos($siteName, '教'),'<hr>'; // 8

// strstr()
echo strstr($domain, 'b'),'<hr>'; // baidu.com
echo strstr($domain, 'b', true),'<hr>'; // www.
echo strstr($domain, 'b', true).strstr($domain,'b'),'<hr>'; // www.baidu.com

2-3 字符串的填充与替换str_pad()和str_replace()

<?php

// 1.字符串填充 str_pad()
$input = 'php.cn';
// 默认使用空格填充
echo str_pad($input, 10),'<hr>'; // php.cn
echo str_pad($input, 10, ' ', STR_PAD_RIGHT),'<hr>'; // php.cn
echo str_pad($input, 10, '*', STR_PAD_LEFT),'<hr>'; // ****php.cn
echo str_pad($input, 10, '#', STR_PAD_BOTH),'<hr>'; // ##php.cn##
echo str_pad($input, 6, '#', STR_PAD_BOTH),'<hr>'; // php.cn
echo str_pad($input, 3, '#', STR_PAD_BOTH),'<hr>'; // php.cn

// 2.str_repeat()字符重复函数
echo str_repeat('*',10),'<hr>'; // **********

// 3.str_shuffle()随机打乱函数
echo str_shuffle($input).'<hr>'; // pcnp.h

// 4.str_replace()字符串替换函数
$email = 'lisi@qq.com';
echo str_replace('qq', 'sina', $email),'<hr>'; // lisi@sina.com

$fruit_list = 'apple,banana,peach';
$fruits1 = ['apple', 'banana', 'peach'];
$fruits2 = ['orange', 'pear'];
echo $fruit_list.'<hr>'; // apple,banana,peach
echo str_replace($fruits1, $fruits2, $fruit_list),'<hr>'; // orange,pear,
echo str_replace('/', '\\', 'C://test/index.php'); // C:\\test\index.php

2-4 字符串长度统计strlen()和mb_strlen(),mb_strwidth()

<?php
// strlen()
$str = "为什么说php是世界上最好的语言?";
echo strlen($str),'<hr>'; // 45
// utf8:3个字节表示一个中文 gbk:2个字节表示一个中文
echo mb_strlen($str),'<hr>'; // 17
// 将所有的多字节文字,全部按2字节处理
echo mb_strwidth($str),'<hr>'; // 31

2-5 字符串的分割与组合explode()和implode()

<?php
// 字符串的分割与组合

$path = 'D://temp/demo/index.php';
echo '<pre>';
print_r(explode('/',$path));

$fruits = 'Apple,Orange,Pear,Peach,Watermelon';
echo '<pre>';
print_r(explode(',',$fruits));

// implode()将数组拼接成字符串
$city = implode('---', ['北京', '上海', '南京', '广州']);
if (is_string($city)) {
    echo '字符串:'.$city;
} else {
    echo '不是字符串';
}

执行结果:

Array
(
    [0] => D:
    [1] => 
    [2] => temp
    [3] => demo
    [4] => index.php
)
Array
(
    [0] => Apple
    [1] => Orange
    [2] => Pear
    [3] => Peach
    [4] => Watermelon
)
字符串:北京---上海---南京---广州

2-6 字符类型转换

<?php
// 字符类型转换
//echo 300,'<hr>'; // 数值类型的字符串表示
//echo true,'<hr>'; // true转为字符‘1’
//echo false,'<hr>'; // false转为字符''
//echo range(1,5); // Array
//var_dump(range(1,5));
//echo (new stdClass()); // 对象不能直接转为字符输出,除非__toString()
//var_dump(new stdClass());
//echo fopen('lesson9.php','r'); // Resource id #3

// 1.强制转换,临时转换
echo gettype(500),'<hr>'; // integer
echo gettype((string)500),'<hr>'; // string
echo gettype(strval(500)),'<hr>'; // string
echo gettype(true).'<hr>'; // boolean
echo gettype(strval(true)),'<hr>'; // string

// 2.永久转换 settype($val,$type)
$old = 500;
echo gettype($old),'<hr>'; // integer
$current = gettype(settype($old, 'string'));
echo gettype($current),'<hr>'; // string
echo gettype($old),'<hr>'; // string

// 3.自动转换,与上下文相关
echo 150+'35abc','<hr>'; // 185 '35abc'==>35
echo 150+'abc123','<hr>'; // 150 'abc123'==>0
echo 150+true,'<hr>'; // 151 true==>1
echo 150+false,'<hr>'; // 150 false==>0
echo 150+null,'<hr>'; // 150 null==>0

2-7 字符串的格式化函数

<?php
//header('content-type:text/html;charset=gbk');
// 大小写转换
echo strtolower('HTTP://WWW.BAIDU.COM'),'<br>'; // http://www.baidu.com
echo strtoupper('http://www.baidu.com'),'<br>'; // HTTP://WWW.BAIDU.COM

// 字符串转时间戳
date_default_timezone_set('PRC'); // 设置默认时区
echo strtotime('2021-01-23'),'<hr>'; // 1611331200
echo date('Y-m-d', 1611331200),'<hr>'; // 2021-01-23

// 千位分隔符,1,234,454,545
echo number_format(1234567890),'<hr>'; // 1,234,567,890
// 设置小数位
echo number_format(3.1415926, 2),'<hr>'; // 3.14
// 自定义小数点和千位分隔符
// number_format ($number , $decimals = 0 , $dec_point = '.' , $thousands_sep = ',' )
echo number_format(31415926.254, 2, '*', '#'),'<hr>'; // 31#415#926*25


// ASCII码与整数之间的转换
// 将整数转为ACSCII码
echo chr(72),'<hr>'; // H
echo chr('72'),'<hr>'; // H
// 将ASCII码转为整数
echo ord('A'),'<hr>'; // 65

// 字符串的\n换行符转为html中的<br>
echo "PHP中文网 \n www.php.cn",'<hr>';
echo nl2br("PHP中文网 \n www.php.cn").'<hr>';

// 编码的转换
echo iconv('utf-8', 'gbk', 'PHP中文网'),'<hr>';

// 加密
echo md5(123456),'<hr>'; // e10adc3949ba59abbe56e057f20f883e
echo sha1(123456),'<hr>'; // 7c4a8d09ca3762af61e59520943dc26494f8941b
echo md5(md5(123456)); // 14e1b600b1fd579f47433b88e8d85291

2-8 字符串内容过滤与转码

<?php
// 字符串内容过滤与转码

// trim()函数
$str = "  www.php.cn  ";
echo '<pre>';
echo $str;echo '<hr>'; //  www.php.cn
// 去除首尾两端空格
echo trim($str),'<hr>'; //www.php.cn
// 去除左端空格
echo ltrim($str),'<hr>'; //www.php.cn
// 去除右端空格
echo rtrim($str),'<hr>'; //  www.php.cn

// 对需要转义的特殊字符进行过滤 \r\n\t\0
$str = " \r\0 www.baidu.com \n\t  ";
echo $str;echo '<hr>';
echo trim($str),'<hr>'; // 去除两边的特殊字符
$str = "www.php.cn";
echo $str.'<hr>';
// 过滤掉.cn
echo trim($str, '.cn'),'<hr>'; // www.php

// strip_tags()过滤掉html标记
$code = <<< "CODE"
<h3 style="color:red">$str</h3>
<p style="color:blue">去除html标记</p>
CODE;
echo $code,'<hr>';
echo strip_tags($code),'<hr>';
// 保留h3标签
echo strip_tags($code, '<h3>'),'<hr>';


// htmlspecialchars()将特殊字符转为html实体
// 特殊字符:html代码在有特殊意义的字符,如<,>,&,',"
// 实体字符:<:&lt; >:&gt; &:&amp; "":&quot; '':&apos;

$html = <<< "HTML"
<h3 style="color:green">生活就像海洋</h3>
<p style="color:blue">&nbsp;&nbsp;只有意志坚强的人才能到达彼岸</p>
HTML;
echo $html,'<hr>';
echo htmlspecialchars($html),'<hr>';
$code = htmlspecialchars($html);
echo $code;echo '<hr>';
// 将编码后的数据转码输出
echo htmlspecialchars_decode($code);

在这里插入图片描述

2-9 字符串的序列化与JSON处理

<?php
// json是javascript的对象表示方法

// json_encode()将数组或对象转为json格式的字符串
$arr = ['id'=>10, 'name'=>'zhangsan', 'gender'=>'male'];
$obj = new stdClass();
$obj->name = 'lisi';
$obj->age = 20;
// 将数组转为json格式
echo json_encode($arr),'<hr>'; // {"id":10,"name":"zhangsan","gender":"male"}
// 将对象转为json格式
echo json_encode($obj),'<hr>'; // {"name":"lisi","age":20}

// json_decode()将一个json格式的字符串转为PHP对象
$json = '[
{"id":11, "name":"Tom", "grade":89},
{"id":12, "name":"James", "grade":88},
{"id":13, "name":"Philips", "grade":90}
]';

// 将json字符串转为PHP对象
$jsonObj = json_decode($json);
echo '<pre>';
//var_dump($jsonObj);
print_r($jsonObj);
echo $jsonObj[2]->name,'<hr>';

// 字符串的序列化:将数组的结构,类型保存到变量或文件中,便于保存或转送
$user = ['id'=>1, 'username'=>'admin', 'password'=>md5(123456)];
echo '<pre>';
print_r($user);
$admin = serialize($user);
echo $admin;
echo '<hr>';
// 反序列化
$temp = unserialize($admin);
print_r($temp);

执行结果:

{"id":10,"name":"zhangsan","gender":"male"}
{"name":"lisi","age":20}
Array
(
    [0] => stdClass Object
        (
            [id] => 11
            [name] => Tom
            [grade] => 89
        )

    [1] => stdClass Object
        (
            [id] => 12
            [name] => James
            [grade] => 88
        )

    [2] => stdClass Object
        (
            [id] => 13
            [name] => Philips
            [grade] => 90
        )

)
Philips
Array
(
    [id] => 1
    [username] => admin
    [password] => e10adc3949ba59abbe56e057f20f883e
)
a:3:{s:2:"id";i:1;s:8:"username";s:5:"admin";s:8:"password";s:32:"e10adc3949ba59abbe56e057f20f883e";}
Array
(
    [id] => 1
    [username] => admin
    [password] => e10adc3949ba59abbe56e057f20f883e
)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值