31、heredoc(双引号的语法糖)
$site = "网站名称:\n\r \"$domain\"";
//\n \r在页面中无论有多少个,统统用空格表示,看源代码可以发现
echo $site . '<hr>';
//双引号语法糖:heredoc
//适用于大段的,多行的动态文本内容,内部有变量和大量的双引号
//html模板
$tpl = <<< "PHPCN"
<ul style="display:inline-grid;border:1px solid">
<li style="color:brown">PHP中文网</li>
<li>$domain</li>
</ul>
PHPCN;
echo $tpl;
32、explode
使用一个字符串分割另一个字符串
此函数返回由字符串组成的数组,每个元素都是
string
的一个子串,它们被字符串separator
作为边界点分割出来。
示例1:
<?php
// 示例 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
// 示例 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *
?>
示例2:
<?php
/*
字符串内不包含分隔字符时,
会简单返回只有一个原始字符串元素的 array。
*/
$input1 = "hello";
$input2 = "hello,there";
$input3 = ',';
var_dump( explode( ',', $input1 ) );
var_dump( explode( ',', $input2 ) );
var_dump( explode( ',', $input3 ) );
?>
以上例程会输出:
array(1) ( [0] => string(5) "hello" ) array(2) ( [0] => string(5) "hello" [1] => string(5) "there" ) array(2) ( [0] => string(0) "" [1] => string(0) "" )
示例3:limit参数的例子
<?php
$str = 'one|two|three|four';
// 正数的 limit
print_r(explode('|', $str, 2));
// 负数的 limit
print_r(explode('|', $str, -1));
// 负数的 limit
print_r(explode('|', $str, -2));
?>
以上例程会输出:
Array ( [0] => one [1] => two|three|four ) Array ( [0] => one [1] => two [2] => three )Array ( [0] => one [1] => two )
33、substr
返回字符串的子串
substr(string
$string
, int$offset
, ?int$length
=null
): string
string
输入字符串。
offset
如果
offset
是非负数,返回的字符串将从string
的offset
位置开始,从 0 开始计算。例如,在字符串 “abcdef
” 中,在位置0
的字符是 “a
”,位置2
的字符串是 “c
” 等等。如果
offset
是负数,返回的字符串将从string
结尾处向前数第offset
个字符开始。如果
string
的长度小于offset
,将返回空字符串。
<?php
$rest = substr("abcdef", -1); // 返回 "f"
$rest = substr("abcdef", -2); // 返回 "ef"
$rest = substr("abcdef", -3, 1); // 返回 "d"
?>
length
如果提供了正数的
length
,返回的字符串将从offset
处开始最多包括length
个字符(取决于string
的长度)。如果提供了负数的
length
,那么string
末尾处的length
个字符将会被省略(若offset
是负数则从字符串尾部算起)。如果offset
不在这段文本中,那么将返回空字符串。如果提供了值为
0
的length
,那么将返回一个空字符串。如果忽略
length
或为null
,返回的子字符串将从offset
位置开始直到字符串结尾。示例 #2 使用负数
length
<?php
$rest = substr("abcdef", 0, -1); // 返回 "abcde"
$rest = substr("abcdef", 2, -1); // 返回 "cde"
$rest = substr("abcdef", 4, -4); // 返回 ""; 在 PHP 8.0.0 之前,返回 false
$rest = substr("abcdef", -3, -1); // 返回 "de"
?>
示例1:
<?php
echo substr('abcdef', 1); // bcdef
echo substr("abcdef", 1, null); // bcdef; 在 PHP 8.0.0 之前,返回空字符串
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
// 访问字符串中的单个字符
// 也可以使用中括号
$string = 'abcdef';
echo $string[0]; // a
echo $string[3]; // d
echo $string[strlen($string)-1]; // f
?>
34、strstr
返回
haystack
字符串从needle
第一次出现的位置开始(此位置也会输出)到
haystack
结尾的字符串。
strstr(string
$haystack
, string$needle
, bool$before_needle
=false
): string|false
注意:
该函数区分大小写。如果想要不区分大小写,请使用 stristr()。
注意:
如果你仅仅想确定
needle
是否存在于haystack
中,请使用速度更快、耗费内存更少的 strpos() 函数。
haystack
输入字符串。
needle
Prior to PHP 8.0.0, if
needle
is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, theneedle
should either be explicitly cast to string, or an explicit call to chr() should be performed.
before_needle
若为
true
,strstr() 将返回needle
在haystack
中的位置之前的部分。
<?php
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // 打印 @example.com
$user = strstr($email, '@', true);
echo $user; // 打印 name
?>
35、stristr()
strstr() 函数的忽略大小写版本
示例1:
<?php
$email = 'USER@EXAMPLE.com';
echo stristr($email, 'e'); // 输出 ER@EXAMPLE.com
echo stristr($email, 'e', true); // 输出 US
?>
示例2:测试字符串的存在与否
<?php
$string = 'Hello World!';
if(stristr($string, 'earth') === FALSE) {
echo '"earth" not found in string';
}
// 输出: "earth" not found in string
?>
示例3:使用非字符串needle
<?php
$string = 'APPLE';
echo stristr($string, 97); // 97 = 小写字母 a
// 输出: APPLE
?>
注意: 此函数可安全用于二进制对象。
36、strpos
查找字符串首次出现的位置
返回值:
返回 needle 存在于
haystack
字符串起始的位置(独立于 offset)。同时注意字符串位置是从0开始,而不是从1开始的。如果没找到 needle,将返回
false
。
示例1:
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// 注意这里使用的是 ===。简单的 == 不能像我们期待的那样工作,
// 因为 'a' 是第 0 位置上的(第一个)字符。
if ($pos === false) {
echo "The string '$findme' was not found in the string '$mystring'";
} else {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
}
?>
示例2:使用 !==
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// 使用 !== 操作符。使用 != 不能像我们期待的那样工作,
// 因为 'a' 的位置是 0。语句 (0 != false) 的结果是 false。
if ($pos !== false) {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
} else {
echo "The string '$findme' was not found in the string '$mystring'";
}
?>
示例3:使用位置偏移量
<?php
// 忽视位置偏移量之前的字符进行查找
$newstring = 'abcdef abcdef';
$pos = strpos($newstring, 'a', 1); // $pos = 7, 不是 0
?>
37、ltrim
删除字符串开头的空白字符(或其他字符)
ltrim(string
$string
, string$characters
= " \n\r\t\v\x00"): string
string
输入的字符串。
characters
通过参数
characters
,你也可以指定想要删除的字符,简单地列出你想要删除的所有字符即可。使用..
,可以指定字符的范围。
$img = 'banner.png';
//扩展名 .png
echo strstr($img,'.') . '<hr>';
//如果不想要.可以去掉
echo ltrim(strstr($img,'.'),'.') . '<hr>';
以上例程会输出:
.png
png
38、str_replace
子字符串替换
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
该函数返回一个字符串或者数组。该字符串或数组是将
subject
中全部的search
都被replace
替换之后的结果。
示例1:基本范例
<?php
// 赋值: <body text='black'>
$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
// 赋值: Hll Wrld f PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
// 赋值: You should eat pizza, beer, and ice cream every day
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream");
$newphrase = str_replace($healthy, $yummy, $phrase);
// 赋值: 2
$str = str_replace("ll", "", "good golly miss molly!", $count);
echo $count;
?>
示例2:
<?php
// 替换顺序
$str = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order = array("\r\n");
$replace = '<br />';
// 首先替换 \r\n 字符,因此它们不会被两次转换
$newstr = str_replace($order, $replace, $str);
echo $newstr;
Line 1 Line 2 Line 3
Line 4
<?php
// 替换顺序
$str = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order = array("\r\n", "\n", "\r");
$replace = '<br />';
// 首先替换 \r\n 字符,因此它们不会被两次转换
$newstr = str_replace($order, $replace, $str);
echo $newstr
Line 1
Line 2
Line 3
Line 4
示例3:
// 输出 F ,因为 A 被 B 替换,B 又被 C 替换,以此类推...
// 由于从左到右依次替换,最终 E 被 F 替换
$search = array('A', 'B', 'C', 'D', 'E');
$replace = array('B', 'C', 'D', 'E', 'F');
$subject = 'A';
echo str_replace($search, $replace, $subject);
// 输出: apearpearle pear
// 由于上面提到的原因
$letters = array('a', 'p');
$fruit = array('apple', 'pear');
$text = 'a p';
$output = str_replace($letters, $fruit, $text);
echo $output;
?>
39、DIRECTORY_SEPARATOR
// '/':目录分隔符,windows,linux,macos都不相同,用系统常量来替换(会根据当前操作系统来自动选择合适的分隔符)
echo str_replace('\\',DIRECTORY_SEPARATOR,$class) . '.php' . '<hr>';
//DIRECTORY_SEPARATOR比较长,可以进行重定义
define('DS',DIRECTORY_SEPARATOR);
echo str_replace('\\',DS,$class) . '.php' . '<hr>';
以上例程会输出:
\admin\controller\User.php
40、strlen
获取字符串长度
返回值:成功则返回字符串
string
的长度;如果string
为空,则返回 0。
<?php
$str = 'abcdef';
echo strlen($str); // 6
$str = ' ab cd ';
echo strlen($str); // 7
?>
注意:
strlen() 返回的是字符串的字节数,而不是其中字符的数量。
注意:
如果为数组调用 strlen() 将导致
E_WARNING
级错误,并返回null
。