Skip to content

Latest commit

 

History

History
164 lines (120 loc) · 5.37 KB

7-常用字符串函数.md

File metadata and controls

164 lines (120 loc) · 5.37 KB

PHP常用字符串函数

这里总结了一些常用的字符串函数,有一个原则就是,尽可能用字符串函数解决问题而不用正则表达式,正则表达式会被字符串函数慢

1、strpos($string , $substr [, int $offset = 0 ])

从字符串左边开始判断$substr$string中的最开始出现的下标值,特别注意当出现在第一位时会返回0,未找到返回false,注意7种值为false的情况 传入$offset参数则从$offset位置开始搜索,负数则表示从距离末尾$offset个字符开始搜索

<?php

$subject = 'aabcdrtr';
$substr = 'aab';

if (strpos($subject, $substr))
{
	echo 'contains';
}
else
{
	echo 'not contains';
}
//not contains //查找到了并返回下标0,0是7种值为false的情况之一,所以会输出not contains

类似函数:strrpos($string , $substr [, int $offset = 0 ]),该函数是查找字符串最后出现的位置, $offset或许会查找字符串中任意长度的子字符串。负数值将导致查找在字符串结尾处开始的计数位置处结束

<?php
$foo = "0123456789a123456789b123456789c";

var_dump(strrpos($foo, '7', -5));  // 从尾部第 5 个位置开始查找
                                   // 结果: int(17)

var_dump(strrpos($foo, '7', 20));  // 从第 20 个位置开始查找
                                   // 结果: int(27)

var_dump(strrpos($foo, '7', 28));  // 结果: bool(false)
?>

2、strstr(string $haystack , mixed $needle [, bool $before_needle = FALSE ] )

查找$needle字符串$haystack首次出现的位置,并返回从该位置开始到末尾的子字符串(包括当前字符)。如果$before_needle为true,则返回该位置之前的字符串(不包括该字符)

<?php
$email = '[email protected]';
$domain = strstr($email, '@');// @ea 结果也是一样,因为查找该字符串的首次出现位置
echo $domain; // 打印 @example.com

echo PHP_EOL;
$user = strstr($email, '@', true); // 从 PHP 5.3.0 起
echo $user; // 打印 name
echo PHP_EOL;
?>

类似函数 stristr(string $haystack , mixed $needle [, bool $before_needle = FALSE ] ),与strstr函数一致,只是本函数会忽略大小写

3、implode($glue = "", array $pieces) or implode(array $pieces)

将数组$pieces$glue字符串拼接,别名是join();当只有数组时,则以空字符串拼接。

<?php

$user_ids = [1, 22, 33, 44, 55];
$user_id_string = '('. implode(',', $user_ids).')';
echo $user_id_string;//(1,22,33,44,55)

4、explode($delimiter, $string, $limit = null)

将字符串$string$delimiter字符串分割. $limit大于0 :表示分割成最多$limit长度,最后的元素将包含剩余部分 $limit等于0其实是等于1:表示分割成最多1个长度,最后的元素将包含剩余部分 $limit小于0: 分割之后的数组,删除末尾 $limit个元素

<?php

$string = '1-2-3';

var_dump(explode('-', $string));// ['1','2','3']
var_dump(explode('-', $string, 0));//['1-2-3']
var_dump(explode('-', $string, 1));//['1-2-3']
var_dump(explode('-', $string, 2));//['1','2-3']
var_dump(explode('-', $string, -1));//['1','2']
var_dump(explode('-', $string, -2));//['1']
var_dump(explode('-', $string, -3));//[]
var_dump(explode('-', $string, -4));//[]

5、trim()

类似函数 ltrim()rtrim()

6、strrev($string)

翻转字符串

<?php

$string = '123456';
echo strrev($string);//654321

7、number_format($number , $decimals = 0 , $dec_point = '.' , $thousands_sep = ',' )

数字格式化函数。两种使用方式:number_format($number , $decimal)number_format($number , $decimals , $dec_point , $thousands_sep ),就是传入两个或者4个参数。

<?php

$money = 123456.789123;

echo number_format($money, 2, '.', '');//123456.79
echo PHP_EOL;
echo number_format($money, 2, '.', ',');//123,456.79
echo PHP_EOL;

8、ord(string $string)chr(int $ascii)

ord()获取指定字符的ASSIC码值,chr()则根据ASSIC码来获取指定字符

<?php

echo chr(97);//a
echo PHP_EOL;
echo ord('a');//97
echo PHP_EOL;

9、str_replace($search, $replace, $subject, &$count = null)

替换字符串,在$subject字符串中,将$search字符串替换成$replace$count表示替换次数。是将$search中的元素一个一个替换,而不是一次性替换

<?php


$string = 'abcdefghijklmnopqrxtuvabc';

$str = str_replace(['a', 'b', 'c'], [1, 2, 3], $string);
$str2 = str_replace('abcd', '123', $string);
echo $str, PHP_EOL;//123defghijklmnopqrxtuv123
echo $str2, PHP_EOL;//123efghijklmnopqrxtuvabc


// 输出 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);//F

10、str_pad( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]])

字符串填充。当$input长度不够$pad_length时,则以$pad_string填充,默认是空格填充。可选的 pad_type 参数的可能值为 STR_PAD_RIGHT,STR_PAD_LEFT 或 STR_PAD_BOTH。如果没有指定 pad_type,则假定它是 STR_PAD_RIGHT。

11、str_repeat

12、str_split

13、str_shuffle

14、substr