PHP中的一些字符串函数

最近在补php了,所以记下一些笔记吧

其实说起来吧,写程序的时候可以多用用原生的函数来解决问题,实在不行再自己写。这样也可以不把精力放在目前不是很重要的地方,而且原生的函数效率可能会更好

explode()

以某个字符串作为分界拆分变量为数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$str = 'Vec,Satori,V5,NTз,eczn';
var_dump( explode(',', $str) );
/* ['Vec', 'Satori', 'V5', 'NTз', 'eczn'] */
var_dump( explode(',', $str, 2) );
/* ['Vec', 'Satori,V5,NTз,eczn'] */
/* 如果explode有第三个参数(下称limit),则处理的匹配项最大不可超过 limit 个
其余的字符串保留作为返回值数组的最后一个项目 */
var_dump( explode(',', $str, -3) );
/* ['Vec', 'Satori'] */
/* 如果limit是负数,则按照无参数处理,然后舍弃掉结果数组中最后 |limit| 个项目 */
var_dump( explode(',', $str, 0) );
/* ['Vec,Satori,V5,NTз,eczn'] */
/* 如果limit是负数,则它会被当作 1 处理 */
var_dump( explode('>', $str) );
/* ['Vec,Satori,V5,NTз,eczn'] */
/* 如果找不到匹配项,则只返回一个$str项的数组 */
var_dump( explode('', $str) );
/* 如果匹配条件是个空字符串,则会返回 false */

implode()

以某个字符串作为分隔符拼接数组元素成一个新的字符串

1
2
3
4
5
6
7
8
$member = Array('Vec','Satori','V5','NTз','eczn');
var_dump( implode(',', $member) );
/* "Vec,Satori,V5,NTз,eczn" */

strcmp()

比较两个字符串是否相等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$str="Hello,PHP";
$text = "iLikePHP";
var_dump( strcmp('PHPisBest', 'PHPisBest') ); /* 0 */
/* 如果返回0则字符串相等 */
/* 非0的返回值都是不相等的 */
var_dump( strcmp($str, $text) ); /* -1 */
/* 返回的是负数,字符串$str没有比$text大 */
var_dump( strcmp($text, $str) ); /* 1 */
/* 返回的是正数,字符串$text比$str大 */

本质上,strcmp是比较字符串中的字符。如果$str1中的字符编码比$str2的大,则返回1,否则返回-1。(而且是直接退出函数)

又或者说,像strcmp('abcdef','abc')这样的函数,会返回3,这说明直到两个字符串都要遍历完,不管其中一个字符串已经到头。这么说来,当遍历第四个字符的时候(而且也是一直相等),第二个参数的字符串(即 ('abc')[3])已经找不到字符了,这时候就会给 返回值+1(似乎('abc')[3]是一个空字符串,所以也只能判断第一个字符串要大),并继续遍历第五个字符,如此类推...

同样的,第一个参数比第二个参数长度要短(strcmp('abc', 'abcdef'))的情况也是类似的,只不过变成了负数。

我自己感觉吧,没有什么特别的需要的话直接用 == 来判断两个字符串是否相等 更好,因为strcmp比较相同的字符串返回的是0,不是true。

str_replace()

以某字符串查找某字符串并替换查找出的字符串

1
2
3
4
5
6
7
8
9
10
11
12
$str1 = 'i like Web, Web is best';
$count=0;
var_dump( str_replace('Web', 'PHP', $str1, $count) );
/* "i like PHP, PHP is best" */
var_dump( $count ); /* 2 */
/* 被替换了2次 */

substr()

截取字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$str = "abcdefghij";
var_dump( substr($str, 0, 3) ); /* "abc" */
/* 从字符串第一个字符开始,截取 3 个字符 */
var_dump( substr($str, 3) ); /* "defghij" */
/* 从字符串第 3 个字符后截取,直到字符串末尾 */
var_dump( substr($str, 0, -3) ); /* "abcdefg" */
/* 从第一个字符开始截取,直到末尾第三个字符之前 */
var_dump( substr($str, -3) ); /* "hij" */
/* 从末尾第三个字符开始截取,直到字符串末尾 */

strlen()

获得字符串的长度

1
2
3
4
var_dump( strlen('VecHK') ); /* 5 */

trim()

去除字符串两端的 空格字符 或者 特定字符

1
2
3
4
5
6
$str = " i am People. ";
var_dump( trim($str) ); /* "i am People." */

特定字符还有:

  • \0 NULL
  • \t 制表符
  • \n 新行
  • \x0B 垂直制表符
  • \r 回车

好了,我好想睡觉……