这里总结了一些常用的字符串函数,有一个原则就是,
尽可能用字符串函数解决问题而不用正则表达式
,正则表达式会被字符串函数慢
从字符串左边开始判断
$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)
?>
查找
$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函数一致,只是本函数会忽略大小写
将数组
$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)
将字符串
$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));//[]
类似函数
ltrim()
、rtrim()
翻转字符串
<?php
$string = '123456';
echo strrev($string);//654321
数字格式化函数。两种使用方式:
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;
ord()
获取指定字符的ASSIC码值,chr()
则根据ASSIC码来获取指定字符
<?php
echo chr(97);//a
echo PHP_EOL;
echo ord('a');//97
echo PHP_EOL;
替换字符串,在
$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。