PHP基础:字符串函数
1.格式化输出
$myname = 'BAOYU';
// (1)printf(): 格式化输出,%s代表字符串, %d代表数值
printf('你好 %s !', $myname);
echo '<br>';
// (2)vprintf(): 与printf()区别就在参数上,多个参数使用数组
vprintf('你好 %s ! 你的年龄是 %d 岁吗?', [$myname,30]);
echo '<br>';
2.数组转字符串、字符串转数组
// (3)implode()/join(): 一维数组转字符串,用指定字符串将一维数组拼装成一个字符串返回
// implode('指定字符串',要转为字符串的数组)
// join('指定字符串',要转为字符串的数组)
$arr=['html', 'css', 'js', 'php'];
echo implode('***', $arr), '<br>';
echo join('***', $arr), '<br>';
echo '<br>';
// (4)explode(): 用指定字符串来分隔另一个字符串, 返回数组
// explode('指定字符串',要转为数组的字符串)
$paras = 'localhost-root-root-utf8-3306';
printf('<pre>%s</pre>', print_r(explode('-', $paras, 5), true));
list($host,$user, $pass) = explode('-', $paras, 4);
echo "$host: $user => $pass";
echo '<hr>';
3.字符串的查找与替换
// (5)substr_replace(): 替换主字符串中指定的子字符串
// substr_replace(主字符串, 替换字符串, [开始替换的起始位置],[从起始位置开始向后的长度])
echo substr_replace('这是主字符串', '这是子串', 0), '<br>';//从第1个字符开始替换后面所有字符
echo substr_replace('这是主字符串', '这是子串', 0, 0), '<br>';//从第1个字符开始替换后面0个字符,未替换任何内容
echo substr_replace('这是主字符串', '这是子串', -4), '<br>';//从倒数第4个字符开始替换后面所有字符
echo substr_replace('这是主字符串', '', 6, 4), '<br>';//从第7个字符开始替换后面4个字符为空,相当于删除
$res = substr_replace(['id:101', 'id:203', 'id:908'], '0', 3, 3);//从数组中的每个值的第4个字符开始替换后面3个字符为0
// print_r($res);
echo implode('; ', $res), '<br>';//用字符串;拼接数组为字符串
$res = substr_replace(['id:101', 'id:203', 'id:908'], ['a', 'b', 'c'], 3);//从主数组中的每个值的第4个字符开始替换后面所有字符为子数组中对应键的值
echo implode('; ', $res), '<br>';//用字符串;拼接数组为字符串
$res = substr_replace(['id:101', 'id:203', 'id:908'], ['a', 'b', 'c'], 3, [1,2,3]);//从主数组中的每个值的第4个字符开始替换后面数组中指定每个值的替换字符长度为子数组中对应键的值
echo implode('; ', $res),'<br>';//用字符串;拼接数组为字符串
echo '<hr>';//分割线
// (6)str_replace(): 查找指定字符并替换为新字符,str_ireplace():忽略大小写版
// str_replace(要查找的指定字符, 要替换为的新字符, 主字符串, [返回被替换的次数])
$class = 'app\home\Index.php';
// 将类名的命名空间分隔符\, 替换成路径分隔符
echo str_replace('\\', DIRECTORY_SEPARATOR, $class), '<br>';//DIRECTORY_SEPARATOR代表系统路径分隔符,win系统为\,os系统为/
echo str_replace('php', '*', 'php.cn, php, thinkphp', $count), '<br>';
echo 'php 被替换了 : ' .$count . '<br>';
// 也支持数组参数实现批量替换
$search = ['交友', '广告', '直播', '带货'];
$replace =['***', '===', '###', '+++'];
$comment = '广告代理, 直播教学, 免费带货, 异性交友';
echo str_replace($search, '###', $comment), '<br>';
echo str_replace($search,$replace, $comment), '<br>';
echo '<hr>';
// (7)strpos():查找字符串首次出现的位置
// strpos(主字符串,要查找的字符串,[指定起始查找位置])
// stripos():忽略大小写版
echo strpos('this is a very nice word!','is'),'<br>';
echo strpos('this is a very nice word!','is',4),'<br>';
echo stripos('this is a very nice word!','is',-21),'<hr>';
// (8)strrpos():查找字符串最后一次出现的位置
// strrpos(主字符串,要查找的字符串,[指定起始查找位置])
// strripos():忽略大小写版
echo strrpos('this is a very nice word!','is'),'<br>';
echo strrpos('this is a very nice word!','is',4),'<br>';
echo strripos('this is a very nice word!','is',-21),'<hr>';
// (9)strstr():查找字符串的首次出现,并返回从字符串出现位置至结尾或开头的字符串
// strstr(主字符串,要查找的字符串,[默认为false向后返回,true则向前返回])
// stristr():忽略大小写版,strchr():是strstr()的别名
echo strstr('this is a very nice word!','is'),'<br>';
echo stristr('this is a very nice word!','is',true),'<hr>';
echo strchr('this is a very nice word!','is',true),'<hr>';
// (10)strrchr():查找字符串最后出现,并返回从字符串出现位置至结尾或开头的字符串
// strrchr(主字符串,要查找的字符):要查找的字符仅为单个字符,如何为数字则被转化为整型并被视为字符顺序值
// 获取 $PATH 中不含磁盘符号的目录
$PATH='D:/a/b/c/d.php';
$dir = substr(strrchr($PATH, ":"), 1);
echo $dir,'<br>';
// 获取最后一行内容
$text = "Line 1\nLine 2\nLine 3";
@$last = substr(strrchr($text, 10),1);
echo $last,'<hr>';
// (11)strpbrk():在字符串中查找一组字符的任何一个字符
// strpbrk(主字符串,要查找的字符串)
$text = 'This is a Simple text.';
// 输出 "is is a Simple text.",因为 'i' 先被匹配
echo strpbrk($text, 'mi'),'<br>';
// 输出 "Simple text.",因为字符区分大小写
echo strpbrk($text, 'S'),'<br>';
4.URL的解码与编码
// (12)parse_str():将字符串解析成多个变量,可处理url的get请求数据
// parse_str(主字符串,要放入的数组名字)
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str, $output);
echo $output['first'],'<br>'; // value
echo $output['arr'][0],'<br>'; // foo bar
echo $output['arr'][1],'<hr>'; // baz
// (13)parse_url():解析 URL,返回其组成部分
$url = 'http://php.edu/0422/case/demo2.php';
$urlArr = parse_url( $url);
printf('<pre>%s</pre>', print_r($urlArr, true));
// (14)http_build_query():生成 URL-encode 之后的请求字符串
$data = ['name'=>'peter zhu', 'age'=>30];
echo http_build_query($data). '<hr>';
// (15)urlencode():编码 URL 字符串
// urldecode():解码已编码的 URL 字符串
echo urlencode($url),'<br>';
echo urldecode(urlencode($url)),'<br>';