04-PHP使用过的函数 31-40

 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, the needle should either be explicitly cast to string, or an explicit call to chr() should be performed.

before_needle

若为 truestrstr() 将返回 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七色的天空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值