学习教程来源于:
PHP中文网教程 PHP字符串操作经典入门
PHP官网PHP手册(简体中文)链接
声明字符串
字符串是一个标量,需要定界符
根据声明定界符可以分为:
1.单引号:''
2.双引号:""
3.heredoc 语法结构
4.nowdoc 语法结构
特殊符号:\r\n,\t,\$
单引号
- 可以声明普通的字符串
- 只能转义单引号和反斜线
- 不能解析变量
<?php
echo 'www.php.cn';
echo '<hr/>';
echo 'I \'m a teacher';//单引号中的字符串出现了单引号,需要转义
echo '<hr/>';
echo '我喜欢php中文网\r\n';
echo '<hr/>';
//若是指向输出反斜线,不需要转义
echo 'C:\temp\\hello.php';//将反斜线自身进行转义
$name = 'peter';
echo '$name';//不能解析变量
echo '<hr/>';
双引号
- 声明一个普通字符串
- 转义全部的特殊字符
- 变量解析
echo "php中文网";
echo '<hr/>';
// 若字符串出现了双引号,需要转义
echo "php中文网\"www.php.cn\"";
echo '<hr/>';
// 双引号中的特殊字符会被解析
echo "C:\php\demo.php";
echo '<hr/>';
echo "C:\temp\php\demo.php";
echo '<hr/>';
$name = 'peter';
echo "我的姓名是:$name";
heredoc与nowdoc语法结构的区别与联系
1.换行,空格会被保留
2.因为不需要对引号进行转义,适合输出大段的HTML代码
3.变量可以自动解析,适合于模板输出
4.如果heredoc或nowdoc与其他字符串拼接,结尾不要加分号;
<?php
// heredoc语法结构(双引号)
$name = 'php中文网';
echo "www.php.cn \"Peter zhu\" $name \r\n";
echo '<hr/>';
echo <<<"EOA"
www.php.cn "Peter zhu" $name \r\n
EOA;
echo '<hr/>';
// nowdoc语法结构(单引号)
// 适合输出大段的HTML文本
echo 'www.php.cn \'php中文网\'';
echo '<hr/>';
echo <<< 'EOD'
www.php.cn 'php中文网'
<hr/>
<form action="index.php" method="get">
用户名:<input type='text'>
</form>
EOD;
?>
heredoc与nowdoc初始化局部变量与类属性
<?php
// 用heredoc和nowdoc初始化函数变量和类属性
function welcome($lang='PHP')
{
$study = <<<"STU"
我喜欢的编程语言是:$lang
STU;
static $hello = <<<"EOD"
欢迎来到PHP中文网"www.php.cn" \r\n <hr/>
EOD;
return $hello.$study;
}
echo welcome('JAVA');
echo '<hr color="red"/>';
class Student
{
public $name = 'Peter zhu';
public static $alias = <<<"NAME"
我的姓名是:Peter zhu <hr/>
NAME;
const COUNTRY = <<< COUN
我爱我的国家,你呢?
COUN;
}
echo (new Student)->name;echo '<hr/>';
echo Student::$alias; echo '<hr/>';
echo Student::COUNTRY; echo '<hr/>';
?>
变量解析的俩种语法
<?php
$siteName = 'php中文网';
$books = ['course'=>'php', 'java', 'python'];
echo "网站名称是:$siteName";
echo '<hr/>';
// echo "我负责的课程是 $books[0]";
// echo "我负责的课程是 $books['course']";
echo "我负责的课程是 {$books['course']}";
echo '<hr/>';
class Web
{
public $webSite = 'php中文网';
public static $domain = 'domain';
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}";
字符串的增删改查
<?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] = ' ';
echo '<hr/>';
echo $domain;
echo '<hr/>';
echo '字符串长度是'.strlen($domain);echo '<hr/>';
?>
子串处理substr及相关函数
<?php
// 1.substr(string, start,length):获取子串的内容
$email = 'peter@qq.com';
echo substr($email, 0, 5), '<hr/>';
echo substr($email, -3, 3), '<hr/>';//负三开始获取三位
//2.替换子串:substr_replace()
echo substr_replace($email, 'php', 6, 2), '<hr/>';
// 将子串长度设置为0,实现无删除的插入
echo substr_replace($email, '_zhu', 5, 0), '<hr/>';
// 设置空子串,实现插入式的删除
echo substr_replace($email, '', 6, 2), '<hr/>';
// 在其实位置插入字符
echo substr_replace($email, '我的邮箱号:', 0, 0), '<hr/>';
// 3.substr_count():查询子串出现的频率(次数)
$str = 'php中文网的域名是www.php.cn,是国内最大的php在线学习平台';
echo substr_count($str,'php'),'<hr/>';//3
echo substr_count($str,'php',0,20),'<hr/>';//指定范围 1
//4.substr_compare($str,$str1)比较子串
// 0:相等 <0,第一个子串小于第二个子串,如果大于0,第一个子串大于第二个子串
echo substr_compare('www.php.cn', 'www.php.cn', 0),'<hr/>';
echo substr_compare('www.php.cn', 'php.cn', 4),'<hr/>';
// 需要注意的是这里指定的查找开始位置是从第一个数开始的
?>
字符串检索函数strpos()与strstr()
<?php
/*
strpos():获取子串的位置,子串检索函数,根据内容查找索引
*/
$domain = 'www.php.cn';
echo strpos($domain,'php',0),'<hr/>';//4
echo strpos($domain,'p',5),'<hr/>';//'5' 查找开始的起始位置
$siteName = 'php中文网';
// 一个中文字符占三个字节
echo strpos($siteName,'中'),'<hr/>';
echo strpos($siteName,'文'),'<hr/>';
// 使用多字节安全函数mb_,mbString开启
echo mb_strpos($siteName,'文'),'<hr/>';
// strstr()
echo strstr($domain,'p').'<hr/>';//将当前查到到的结果及后面的字符串输出
echo strstr($domain,'p',true).'<hr/>';
echo strstr($domain,'p',true).strstr($domain,'p');
?>
字符串的填充与替换str_pad()与str_replace()
字符串填充 str_pad()
string str_pad( string $input, int $pad_length[, string $pad_string = " "[, int $pad_type = STR_PAD_RIGHT]] )
该函数返回 input 被从左端、右端或者同时两端被填充到指定长度后的结果。如果可选的 pad_string 参数没有被指定,input 将被空格字符填充,否则它将被 pad_string 填充到指定长度。
$input = 'php.cn';
//第二个参数表示将字符串填充到多长
echo str_pad($input,10),'<hr/>';
echo str_pad($input,10,' ',STR_PAD_RIGHT),'<hr/>';
echo str_pad($input,10,'*',STR_PAD_LEFT),'<hr/>';
echo str_pad($input,10,'#',STR_PAD_BOTH),'<hr/>';
str_repeat()字符重复函数
echo str_repeat('*', 20).'<hr/>';
str_shuffle() 随机打乱函数
echo str_shuffle($input).'<hr/>';
str_replace()字符串替换函数
$email = 'peter@qq.com';
str_replace('qq', '163', $email).'<hr/>';
$hobby = '我喜欢吃的水果是:苹果、香蕉、桃子';
$fruits1 = ['苹果','香蕉','桃子'];
$fruits2 = ['西瓜','梨子','桔子'];
echo $hobby.'<hr/>';
echo str_replace($fruits1,$fruits2,$hobby);echo '<hr/>';
echo str_replace('/', '\\', 'C://demo/index.php');
字符串长度统计strlen()、mb_strlen()、mab_strwidth()
<?php
// strlen()
$siteName = 'php中文网';
echo strlen($siteName).'<hr/>';
// utf8,3个字节表示一个中文
echo mb_strlen($siteName).'<hr/>';
// 将所有多字节文字,全部按2字节处理
echo mb_strwidth($siteName).'<hr/>';
?>
字符串的分割与组合explode()、implode()
<?php
// 字符串的分割与组合
$path = 'C://www/blog/case/index.php';
echo '<pre>';
print_r(explode('/',$path));
echo '</pre>';
$fruits = 'Apple,Orange,Pear,Watermelon';
echo '<pre>';
print_r(explode(',', $fruits));
echo '</pre>';
// implode()将数组拼接成字符串
$city = implode('---', ['合肥','芜湖','安庆','六安']);
if (is_string($city)) {
echo '字符串:'.$city;
} else {
echo '不是字符串';
}
?>
字符串类型转换(临时、永久、自动)
字符类型转换
echo 300,'<hr/>'; //数值类型的字符串表示
echo true,'<hr/>'; //true转为字符'1'
echo false,'<hr/>'; //false转为''
echo range(1,5); //Array
var_dump(range(1,5));
echo '<hr/>';
echo (new stdClass);
var_dump(new stdClass); //对象不能直接转换为字符输出,除非__toString()
echo fopen('lesson05.php','r'); //Resource id #3
// 类型转换有三种:强制转换,永久转换,自动转换
//1.强制转换,临时转换
echo gettype((string)500),'--',gettype(500),'<hr/>';
echo gettype(strval(500)),'--',gettype(500),'<hr/>';
echo gettype(strval(true)),'--',gettype(true),'<hr/>';
// 2.永久转换 settype($val,$type)
$old = 500;
$current = gettype(settype($old, 'string'));
echo gettype($current).'---'.gettype($old);
echo '<hr color="red"/>';
//3.自动转换,与上下文相关
echo 150+'35abc','<hr/>'; //'35abc'==>35
echo 150+'a35bc','<hr/>'; //'a35bc'==>0
echo 150+true,'<hr/>'; //true ==>1
echo 150+false,'<hr/>'; //false==>0
echo 150+null,'<hr/>'; //null==>0
字符串的格式化函数
<?php
// 大小写转换
echo strtolower('HTTP://WWW.PHP.CN'),'<hr/>';
echo strtoupper('http://www.php.cn'),'<hr/>';
// 字符串转时间戳
date_default_timezone_set('PRC');//设置默认时区
echo strtotime('2017-10-10'),'<hr/>';
echo date('Y-m-d',1507564800),'<hr/>';
// 千位分隔符,1,234,567,894
echo number_format(1234567890),'<hr/>';
// 设置一下小数位
echo number_format(123456789.556,2),'<hr/>';
// 自定义小数点和千位符
echo number_format(123456789.556,2,'*','#'),'<hr/>';
// ACSII码和整数之间的转换
// 将整数转换为ASCII码
echo chr(88),'<hr/>';//推荐写法
echo chr(88),'<hr/>';
// 将ASCII码转换为整数
echo ord('X'),'<hr/>';
//字符串的\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(md5(123456)),'<hr/>';
echo sha1(123456),'<hr/>';
?>
字符串内容过滤与转码
<?php
// 字符串内容过滤与转码
// trim()函数
$str = " www.php.cn ";
echo '<pre>';
echo $str;echo '<hr/>';
echo trim($str),'<hr/>';//去掉俩边的空格
echo ltrim($str),'<hr/>';//去掉左边的空格
echo rtrim($str),'<hr/>';//去掉右边的空格
echo '</pre>';
// 对需要转义的特殊字符进行过滤 \r\n\t\0
$str = " \r\0 www.php.cn \n\t ";
echo $str;echo '<hr/>';
echo trim($str),'<hr/>';//去掉俩边的特殊字符
$str = "www.php.cn";
echo $str,'<hr/>';
echo trim($str,'.cn'),'<hr/>';
// strip_tags()过滤掉html标记
$code = <<<"CODE"
<h3 style="color:red">$str</h3>
<p style="color:blue">php中文网</p>
CODE;
echo $code,'<hr/>';
echo strip_tags($code),'<hr/>';
echo strip_tags($code,'<h3>'),'<hr/>';
// htmlspecialchars(string)将特殊字符转为html实体
// 特殊字符:html代码有特殊意义的:<,>,&,',"主要这五个
// 实体字符:<:< > > &:& "":" '':'
$html = <<< "HTML"
<h3 style="color:green">PHP是世界上最好的语言</h3>
<p style="color:blue"> 任何一门语言都没有PHP好</p>
HTML;
echo $html,'<hr/>';
echo htmlspecialchars($html),'<hr/>';
$code = htmlspecialchars($html);
// 将编码后的数据转码输出
echo htmlspecialchars_decode($code);
?>
字符串的序列化与json处理
<?php
// json是JavaScript的对象表示方法
// json_encode()将数组或对象转为json格式的字符串
$arr = ['id'=>10,'name'=>'peter','isMarried'=>true];
$obj = new stdClass;
$obj->name = '朱老师';
$obj->salary = 3000;
// 将数组转为json格式
echo json_encode($arr),'<hr/>';
// 将对象转换为json格式
echo json_encode($obj),'<hr/>';
// json_decode:将一个json格式的字符串转为PHP对象,不能转数组
$json = '[
{"id":10,"name":"peter","grade":90},
{"id":18,"name":"zhu","grade":80},
{"id":21,"name":"wang","grade":70}
]';
// 将json字符串转换为PHP对象
$jsonObj = json_decode($json);
echo '<pre>';
print_r($jsonObj);
echo '</pre>';
echo '我的姓名是:'.$jsonObj[1]->name,'<hr/>';
// 字符串的序列化:将数组的结构,类型保存到变量或者文件中方便保存或者传送
$user = ['id'=>1,'username'=>'admin','passward'=>md5(123456)];
echo '<pre>';
print_r($user);
$admin = serialize($user);
echo $admin;
// a:3:{s:2:"id";i:1;s:8:"username";s:5:"admin";s:8:"passward";s:32:"e10adc3949ba59abbe56e057f20f883e";}
// 类型:长度:值
echo '</pre>';
echo '<hr/>';
// 反序列化
$temp = unserialize($admin);
print_r($temp);
?>