PHP7实践指南:O2O网站与App后台开发
上QQ阅读APP看书,第一时间看更新

5.3 字符串操作

本节介绍字符串的常用处理函数,包括字符串的查找、替换、截取、去空格、转义等常用函数。

5.3.1 改变字符串大小写

可以使用以下函数来改变字符串的大小写:

● Ucfirst将字符串的首字母转换为大写。

● Lcfirst将字符串的首字母转换为小写。

● Ucwords将字符串中每个单词的首字母转换为大写。

● Strtoupper将字符串转化为大写。

● Strtolower将字符串转化为小写。

示例如下:

        <? php
        $str = 'i love you' . "<br/>";
        echo ucfirst($str) . ucwords($str) . strtoupper($str);
        $str = 'I LOVE YOU'. "<br/>";
        echo strtolower($str) . lcfirst($str);
        ?>

以上程序的执行结果如下:

          I love you
          I Love You
          I LOVE YOU
          i love you
          i LOVE YOU

5.3.2 查找字符串

可以使用以下函数来查找字符串。

1. stripos:查找字符串中某部分字符串首次出现的位置(不区分大小写)

语法如下:

     int stripos ( string $haystack , string $needle [, int $offset = 0 ] )

参数说明如下:

● haystack

在该字符串中查找。

● needle

注意,needle可以是一个单字符或者多字符的字符串。如果needle不是一个字符串,那么它将被转换为整型并被视为字符顺序值。

● offset

可选的offset参数允许指定从haystack中的哪个字符开始查找,返回的位置数字值仍然相对于haystack的起始位置。

返回needle存在于haystack字符串开始的位置(独立于偏移量),同时注意字符串位置起始于0,而不是1。

如果未发现needle就将返回false。

示例如下:

        <? php
        $findme = 'c';
        $mystring1 = 'xyz';
        $mystring2 = 'ABC';
        $pos1 = stripos($mystring1, $findme);
        $pos2 = stripos($mystring2, $findme);
        var_dump($pos1);
        var_dump($pos2);
        ?>

执行结果为:bool(false) int(2)。

2. strripos:计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)

语法如下:

        int strripos ( string$haystack , string$needle [, int$offset=0 ] )

说明:负数偏移量将使得查找从字符串的起始位置开始,到offset位置为止。

示例如下:

        <? php
        $findme = 'c';
        $findme1 = 'C';
        $mystring = 'ABCabcabcABC';
        $pos1 = strripos($mystring, $findme);

        $pos2=strripos($mystring,$findme1);
        var_dump($pos1);
        var_dump($pos2);
        ?>

上述代码的执行结果为:int(11) int(11)。

3. strrpos:计算指定字符串在目标字符串中最后一次出现的位置

语法如下:

    int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )

说明:如果是负数的偏移量,将会导致查找在字符串结尾处开始的计数位置处结束。

示例如下:

        <? php
        $findme='c';
        $findme1='C';
        $mystring='ABCabcabcABC';
        $pos1=strrpos($mystring,$findme);
        $pos2=strrpos($mystring,$findme1);
        $pos3=strrpos($mystring,$findme1, -5);
        var_dump($pos1);
        var_dump($pos2);
        var_dump($pos3);
        ?>

上述代码的执行结果为:int(8) int(11) int(2)。

4. strpos:查找字符串首次出现的位置

语法如下:

    mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

说明:和strrpos()、strripos()不一样,strpos的偏移量不能是负数。

示例如下:

        <? php
        $findme='c';
        $findme1='C';
        $mystring='ABCabc';
        $pos1=strpos($mystring,$findme);
        $pos2=strpos($mystring,$findme1);
        var_dump($pos1);
        var_dump($pos2);
        ?>

上述代码的执行结果为:int(5) int(2)。

5.3.3 替换字符串

可以对一个字符串中的特定字符或子串进行替换,这是非常常用的功能。

1.str_ireplace()和str_replace()函数

str_ireplace()和str_replace使用新的字符串替换原来字符串中指定的特定字符串,str_replace区分大小写,str_ireplace()不区分大小写。两者语法相似,str_ireplace()的语法如下:

        mixed str_ireplace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

说明:该函数返回一个字符串或者数组,该字符串或数组是将subject中全部的search用replace替换(忽略大小写)之后的结果。参数count表示执行替换的次数。

使用示例如下:

        <? php
        $str = 'hello, world, hello, world';
        $replace = 'hi';
        $search = 'hello';
        echo str_ireplace($search, $replace, $str);
        ?>

执行以上代码的输出结果为:

          hi,world,hi,world

2.substr_replace()函数

substr_replace()函数的语法如下:

        mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )

说明:substr_replace()在字符串string的副本中将由start和可选的length参数限定的子字符串使用replacement进行替换。如果start为正数,替换将从string的start位置开始。

如果start为负数,替换将从string的倒数第start个位置开始。如果设定了length参数并且为正数,就表示string中被替换的子字符串的长度。如果设定为负数,就表示待替换的子字符串结尾处距离string末端的字符个数。如果没有提供此参数,那么默认为strlen(string)(字符串的长度)。当然,如果length为0,那么这个函数的功能为将replacement插入string的start位置处。

该函数的使用示例如下:

        <? php
        $str = 'hello, world, hello, world';
        $replace = 'hi';
        echo substr_replace($str, $replace, 0,5);
        ?>

以上代码的执行结果为:

          hi,world,hello,world

5.3.4 截取字符串

PHP中使用substr截取字符串,其语法如下:

        string substr ( string $string , int $start [, int $length ] )

说明:其作用是返回字符串string,由start和length参数指定的长度为length的子字符串。如果start是非负数,返回的字符串将从string的start位置开始,从0开始计算。如果start是负数,那么返回的字符串将从string结尾处向前数第start个字符开始。如果string的长度小于或等于start,就将返回false。

该函数的使用示例如下:

        <? php
        $rest=substr("abcdef", 1);    // 返回 "f"
        echo $rest . "<br/>";
        $rest=substr("abcdef",-2);    // 返回 "ef"
        echo $rest . "<br/>";
        $rest=substr("abcdef",-3, 1);// 返回 "d"
        echo $rest . "<br/>";
        ?>

以上代码的运行结果如下:

          bcdef
          ef
          d

5.3.5 去除字符串首尾空格和特殊字符

在PHP中,使用trim()函数可以去除字符串首尾两边的空格或特殊字符,使用ltrim()和rtrim()函数将可分别去除字符串左边和右边的空格或特殊字符。这3个函数的语法分别如下:

        string trim ( string $str [, string $character_mask ] )
        string ltrim ( string $str [, string $character_mask ] )
        string rtrim ( string $str [, string $character_mask ] )

这3个函数都是返回字符串str去除相应特定字符后的结果。str是待处理的字符串,charlist是过滤字符串。如果不指定第2个参数,trim()将去除以下字符:

●" ",普通空格符。

● "\t",制表符。

● "\n",换行符。

● "\r",回车符。

● "\0",空字节符。

●"\x0B",垂直制表符。

这3个函数的使用示例如下:

        <? php
        $text="\t\tThese are a few words :) ...  ";
        $binary = "\x09Example string\x0A";
        $hello  ="Hello World";
        echo trim($text) . "<br/>";
        echo rtrim($text) . "<br/>";
        echo rtrim($text, " \t.") . "<br/>";
        echo ltrim($hello, "H") . "<br/>";
        // 删除 $binary末端的ASCII码控制字符
        //(包括0~31)
        echo rtrim($binary, "\x00..\x1F") . "<br/>";
        ?>

以上代码的执行结果为:

          These are a few words :) ...
          These are a few words :) ...
          These are a few words :)
          ello World
          Example string

5.3.6 计算字符串的长度

PHP中使用strlen()函数返回字符串的长度,该函数的语法如下:

          int strlen ( string $string )

使用示例如下:

        <? php
        $str = 'abcdef';
        echo strlen($str); // 6
        $str = ' ab cd ';
        echo strlen($str); // 7
        ?>

以上代码的执行结果为:

          67

5.3.7 转义和还原字符串

PHP中使用addslashes函数转义字符串。该函数的语法格式如下:

        string addslashes ( string $str )

说明:该函数返回转义后的字符串,在一些特殊字符前加了转义符号“\”。这些字符是单引号(')、双引号(")、反斜线(\)与NUL(NULL字符)。

一个使用addslashes()的例子是往数据库中输入数据。例如,将名字O'reilly插入数据库中,就需要对其进行转义。强烈建议使用DBMS指定的转义函数(比如MySQL是mysqli_real_escape_string(), PostgreSQL是pg_escape_string()),但是如果你使用的DBMS没有一个转义函数,并且使用 \ 来转义特殊字符,就可以使用这个函数。仅仅是为了获取插入数据库的数据,额外的 \ 并不会插入。当PHP指令magic_quotes_sybase被设置成on时,意味着插入’时将使用’进行转义。

转义字符串的示例如下:

        <? php
        $str = "I don't love you";
        echo addslashes($str);
        ?>

执行以上程序的结果为:

          I don\'t love you

stripslashes可以还原经过addslashes转义后的字符串。示例如下:

        <? php
        $str="I don't love you";
        $str1=addslashes($str);
        echo$str1;
        echo stripslashes($str1);
        ?>

以上程序的执行结果为:

    I don\'t love youI don't love you

5.3.8 重复一个字符串

使用str_repeat()函数可以重复一个字符串,语法如下:

     string str_repeat ( string $input , int $multiplier )

说明:该函数返回input重复multiplier次后的结果。multiplier必须大于等于0,如果multiplier被设置为0,那么函数将返回空字符串。

使用示例如下:

        <? php
        echo str_repeat("-=", 10);
        ?>

以上代码的执行结果为:

        -=-=-=-=-=-=-=-=-=-=

5.3.9 随机打乱字符串

可使用str_shuffle()函数来随机打乱一个字符串,其语法如下:

        string str_shuffle ( string $str )

说明;str_shuffle() 函数打乱一个字符串,使用任何一种可能的排序方案。该函数的使用示例如下:

        <? php
        $str = 'abcdef';
        echo str_shuffle($str) . "<br/>";
        echo str_shuffle($str) . "<br/>";
        echo str_shuffle($str) . "<br/>";
        ?>

执行上述代码的结果为:

          ecfabd
          debcaf
          bcfeda

注意,每次使用str_shuffle()函数打乱字符串都是随机的。

5.3.10 分割字符串

可以使用explode()函数将一个字符串分割成另一个字符串,其语法如下:

        array explode ( string $delimiter , string $string [, int $limit ] )

说明:此函数返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分割出来。delimiter表示边界上的分割字符,如果设置了limit参数并且是正数,那么返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分。如果limit参数是负数,就返回除最后的-limit个元素外的所有元素。如果limit是0,就会被当作1。

该函数的使用示例如下:

        <? php
        $pizza  ="piece1 piece2 piece3 piece4 piece5 piece6";
        $pieces = explode(" ", $pizza);
        print_r($pieces);
        $input = 'hello, world';
        print_r(explode(', ', $input));
        ?>

上述代码的执行结果如下:

          Array ( [0] => piece1 [1] => piece2 [2] => piece3 [3] => piece4 [4] => piece5[5] => piece6 )Array ( [0] => hello [1] => world )