PHP 字符串操作整理

字符串的概念:

一个字符串string就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着  PHP 只能支持 256 的字符集,因此不支持 Unicode 。String最大可以达到2G;

语法:

单引号/双引号/heredoc/newdoc    抛开效率问题这些都一样

(一)字符串输出:

echo():输出一个或多个字符串

print():输出一个字符串

printf():输出格式化字符串        echo '<pre>'  也能达到格式化的效果

echo 和 print 都不是函数,而是 语言结构,所以圆括号都不是必需的。两者十分相似,功能几乎是完全一样。

1、echo 可以输出多个字符串,使用 , 连接

echo 'a','b','c';

输出:abc

如果你非要加上圆括号,需要注意

echo ('a','b','c');      //错误
echo ('a'),('b'),('c');  //正确

2、print 只能输出一个字符串

print 'a','b','c';  //错误
print 'abc';        //正确
print 'a'.'b'.'c';  //正确

注意:上面的 'a'.'b'.'c' 并不是多个字符串,而是 PHP 中拼接(concat)多个字符串后的一个字符串。

3、echo 没有返回值,print 有返回值 1

因此 print 能用在表达式中:

$ret = print 'abc';
echo $ret + 1;

输出:abc2

4、echo 输出的速度比 print 快

(二)数组和对象输出:

print_r():输出数组

var_dump():输出object //调试使用居多

print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。

print_r() 会舍弃掉小数位末尾的 “0”;布尔值 true 输出 1,false 不输出;空字符串 和 null 不输出。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。

var_dump() 方法是判断一个变量的类型与长度,并输出变量的值和数据类型。var_dump() 输出比 print_r() 更详细,一般调试时用得多。两者区别如下:

$arr = array(5, 5.0, 'hello', '', true, false, null);
var_dump($arr);
print_r($arr);

输出:

array(7) {
  [0]=>
  int(5)
  [1]=>
  float(5)
  [2]=>
  string(5) "hello"
  [3]=>
  string(0) ""
  [4]=>
  bool(true)
  [5]=>
  bool(false)
  [6]=>
  NULL
}
Array
(
    [0] => 5
    [1] => 5
    [2] => hello
    [3] => 
    [4] => 1
    [5] => 
    [6] => 
)

题外:如果想捕捉 print_r() 的输出,可添加一个 true 参数。此时 print_r() 将不打印结果,而是返回其输出。

$str = "hello";
$result = print_r($str, true);
echo $result;

输出:hello

(三)字符串去除

trim():去除字符串 首尾 空白等特殊符号或指定字符序列

ltrim():去除字符串 首 空白等特殊符号或指定字符序列

rtrim():去除字符串 尾 空白等特殊符号或指定字符序列

chop():同 rtrim()   

以上函数第二个参数都可以指定删除的字符

1、trim 去除字符串首尾处的空白字符(或者其他字符)

语法:

string trim ( string $str [, string $charlist = " \t\n\r\0\x0B" ] )

参数说明:

str          待处理的字符串。
charlist  可选参数,过滤字符也可由 charlist 参数指定。一般要列出所有希望过滤的字符,也可以使用 “…” 列出一个字符范围。

注意:

  1. 该函数区分大小写
  2. 此函数返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:
    " " (ASCII 32 (0x20)),普通空格符。
    "\t" (ASCII 9 (0x09)),制表符。
    "\n" (ASCII 10 (0x0A)),换行符。
    "\r" (ASCII 13 (0x0D)),回车符。
    "\0" (ASCII 0 (0x00)),空字节符。
    "\x0B" (ASCII 11 (0x0B)),垂直制表符。

示例

<?php
/* 去空格 */
$text = " There are a few words ";
var_dump($text);       //string ' There are a few words ' (length=23)
var_dump(trim($text)); //string 'There are a few words' (length=21)

/* 去制表符 */
$text = "\tThere are a few words\t";
var_dump($text);       //string '   There are a few words   ' (length=25)
var_dump(trim($text)); //string 'There are a few words' (length=21)

/* 去换行符 */
$text = "\nThere are a few words\n";
var_dump($text); 
/*string '
There are a few words
' (length=23) */
var_dump(trim($text)); //string 'There are a few words' (length=21)

/* 去回车符 */
$text = "\rThere are a few words\r";
var_dump($text); 
/*string '
There are a few words
' (length=23) */
var_dump(trim($text)); //string 'There are a few words' (length=21)

/* 去空字节符 */
$text = "\0There are a few words\0";
var_dump($text);      //string '&#0;There are a few words&#0;' (length=23)
var_dump(trim($text));//string 'There are a few words' (length=21)

/* 去垂直制表符 */
$text = "\x0BThere are a few words\x0B";
var_dump($text);      //string ' There are a few words ' (length=23)
var_dump(trim($text));//string 'There are a few words' (length=21)

/* 各种去 */
$text = "\x0B\r\n\t\0 There are a few words \x0B\r\n\t\0";
var_dump($text);
/*string '
    &#0; There are a few words 	
    &#0;' (length=33)*/
var_dump(trim($text)); //string 'There are a few words' (length=21)
?>
<?php
/* 去掉指定的字符 */
$text = "There are a few words";
$text = trim($text, 's');
var_dump($text); //string 'There are a few word' (length=20)

/* 去掉指定的字符串 */
$text = "There are a few words";
$text = trim($text, 'words');
var_dump($text); //string 'There are a few ' (length=16)

/* 第二个参数为数字是无效的 */
$text = "There are a few words";
$text = trim($text, 115);
var_dump($text); //string 'There are a few words' (length=21)

/* 第二个参数为ASCII码 (s的ASCII为 115(0x73))  */
$text = "There are a few words";
$text = trim($text, "\x73");
var_dump($text); //string 'There are a few word' (length=20)

/* 去掉 0-31 ASCII控制字符 */
$text = "\x01\x02There are a few words\x0A\x1F";
$text = trim($text, "\x00..\x1F");
var_dump($text); //string 'There are a few words' (length=21)
?>

2、ltrim删除字符串开头的空白字符(或其他字符)

语法:

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

        该函数与trim的区别是仅仅去除左侧的空白字符。示例可以参考trim

参数说明:

str  待处理的字符串。
character_mask  可选参数,过滤字符也可由 character_mask 参数指定。一般要列出所有希望过滤的字符,也可以使用 “…” 列出一个字符范围。

注意:

  1. 该函数区分大小写
  2. 该函数返回一个删除了 str 最左边的空白字符的字符串。 如果不使用第二个参数, ltrim() 仅删除以下字符:
    " " (ASCII 32 (0x20)),普通空格符。
    "\t" (ASCII 9 (0x09)),制表符。
    "\n" (ASCII 10 (0x0A)),换行符。
    "\r" (ASCII 13 (0x0D)),回车符。
    "\0" (ASCII 0 (0x00)),空字节符。
    "\x0B" (ASCII 11 (0x0B)),垂直制表符。

示例

<?php
$text = "There are a few words";
$text = ltrim($text, "T");
var_dump($text); //string 'here are a few words' (length=20)

$text = "There are a few words";
$text = ltrim($text, "s"); 
var_dump($text); //string 'There are a few words' (length=21)
?>

3、rtrim删除字符串末端的空白字符(或者其他字符)

语法:

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

该函数与trim的区别是仅仅去除右侧的空白字符。示例可以参考trim

参数说明:

str 待处理的字符串。
character_mask  可选参数,过滤字符也可由 character_mask 参数指定。一般要列出所有希望过滤的字符,也可以使用 “…” 列出一个字符范围。

注意:

  1. 该函数区分大小写
  2. 该函数返回一个删除了 str 最右边的空白字符的字符串。 如果不使用第二个参数, rtrim() 仅删除以下字符:
    " " (ASCII 32 (0x20)),普通空格符。
    "\t" (ASCII 9 (0x09)),制表符。
    "\n" (ASCII 10 (0x0A)),换行符。
    "\r" (ASCII 13 (0x0D)),回车符。
    "\0" (ASCII 0 (0x00)),空字节符。
    "\x0B" (ASCII 11 (0x0B)),垂直制表符。

示例

<?php
$text = "There are a few words";
$text = rtrim($text, "T");
var_dump($text); //string 'There are a few words' (length=21)

$text = "There are a few words";
$text = rtrim($text, "s"); 
var_dump($text); //string 'There are a few word' (length=20)
?>

4、chop删除字符串末端的空白字符(或者其他字符)

语法:

string chop ( string $str [, string $character_mask ] )

该函数是 rtrim() 的别名。可参考rtrim()

参数说明:

str  待处理的字符串。
character_mask  可选参数,过滤字符也可由 character_mask 参数指定。一般要列出所有希望过滤的字符,也可以使用 “…” 列出一个字符范围。

注意:

  1. 该函数区分大小写
  2. 该函数返回一个删除了 str 最右边的空白字符的字符串。 如果不使用第二个参数, chop() 仅删除以下字符:
    " " (ASCII 32 (0x20)),普通空格符。
    "\t" (ASCII 9 (0x09)),制表符。
    "\n" (ASCII 10 (0x0A)),换行符。
    "\r" (ASCII 13 (0x0D)),回车符。
    "\0" (ASCII 0 (0x00)),空字节符。
    "\x0B" (ASCII 11 (0x0B)),垂直制表符。

示例

<?php
$text = "There are a few words";
$text = chop($text, "T");
var_dump($text); //string 'There are a few words' (length=21)

$text = "There are a few words";
$text = chop($text, "s"); 
var_dump($text); //string 'There are a few word' (length=20)
?>

(四)字符串拼接

implode():使用字符将数组的内容组合成一个字符串  join():同 implode()

注释:implode() 函数的 separator 参数是可选的。但是为了向后兼容,推荐您使用使用两个参数。

语法:implode(separator,array)

参数说明:

separator    可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。
array    必需。要组合为字符串的数组。

示例
 

    <?php
            $arr = array('Hello','World!','I','love','Shanghai!');
            echo implode(" ",$arr);      // string(29) "Hello World! I love Shanghai!" 
    ?>

 

(五)字符串切割

explode():使用一个字符串分割另一个字符串   (指定符号切割)

str_split():将字符串分割到数组中  (指定位数切割)

chunk_split():将字符串分割成小块

与implode不同的是explode只支持一种参数顺序,也可以对explode指定截取大小与str_split不同的是大于指定的截取范围的字符都会归属到最后的数组中

1、explode():使用一个字符串分割另一个字符串

注释:"separator" 参数不能是空字符串。 该函数是二进制安全的。

语法:

explode(separator,string,limit)

参数说明:

separator    必需。规定在哪里分割字符串。
string    必需。要分割的字符串。
limit    可选。规定所返回的数组元素的数目。

           可能的值:大于 0 - 返回包含最多 limit 个元素的数组
                             小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组
                             0 - 返回包含一个元素的数组

示例

<?php
          $str = 'one,two,three,four';
           // 零 limit
           print_r(explode(',',$str,0));           //Array ( [0] => one,two,three,four )
           // 正的 limit
           print_r(explode(',',$str,2));         //Array ( [0] => one [1] => two,three,four )
           // 负的 limit
           print_r(explode(',',$str,-1));        //Array ( [0] => one [1] => two [2] => three ) 
?>

2、str_split():将字符串分割到数组中

语法:

str_split(string,length)

参数说明:

string    必需。规定要分割的字符串。
length    可选。规定每个数组元素的长度。默认是 1。

示例

<?php

       $str = 'abcdef'; 

       $arr = str_split($str); 
       // str_split()发现,把字符串的字符,拆成了数组,每个单元一个字符. 
       print_r($arr);     //Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f )

       // 经理问: 能不能2个字符一个单元, 拆成数组. 
       $arr = str_split($str,2); 
       print_r($arr);      //Array ( [0] => ab [1] => cd [2] => ef ) 

       // 截取到最后,如果剩下的字符串,不够长度N,那就剩下当一组. 
       $arr = str_split($str,4); 
       var_dump($arr);     //Array ( [0] => abcd [1] => ef )

?>

3、chunk_split():将字符串分割成小块

注释:该函数不改变原始字符串。

语法:

chunk_split(string,length,end)

参数说明:

string    必需。规定要分割的字符串。
length    可选。数字值,定义字符串块的长度。默认是 76。
end    可选。字符串值,定义在每个字符串块末端放置的内容。默认是 \r\n。

示例

<?php
          $str = "Hello world!";
          echo chunk_split($str,6,"...");       //  Hello ...world!...
?>

(六)字符串截取

substr():从字符串中获取其中的一部分

strstr():查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符

subchr():同 strstr()

strtok(string str,string tokens):返回直到遇到tokens之前的所有内容

strstr函数区分大小写 如果想不区分就要使用stristr函数了

strrchr():查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符

strrchr函数如果查找多个字符那么只能按照第一个查找  如果查找的不是字符串将会被转成int类型查找

1、substr():从字符串中获取其中的一部分

语法:

substr(string,start,length)

参数说明:

string必需。规定要返回其中一部分的字符串。
start

必需。规定在字符串的何处开始。

  • 正数 - 在字符串的指定位置开始
  • 负数 - 在从字符串结尾开始的指定位置开始
  • 0 - 在字符串中的第一个字符处开始
length

可选。规定被返回字符串的长度。默认是直到字符串的结尾。

  • 正数 - 从 start 参数所在的位置返回的长度
  • 负数 - 从字符串末端返回的长度

示例

<?php
echo substr("Hello world",0,10)."<br>";       // Hello worl
echo substr("Hello world",1,8)."<br>";        //ello wor
echo substr("Hello world",0,5)."<br>";        //Hello
echo substr("Hello world",6,6)."<br>";        //world

echo substr("Hello world",0,-1)."<br>";       //Hello worl
echo substr("Hello world",-10,-2)."<br>";     //ello wor
echo substr("Hello world",0,-6)."<br>";       //Hello
echo substr("Hello world",-2-3)."<br>";       //world
?>

 

2、strstr():查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符 

语法:

strstr(string,search,before_search)

参数说明:

string必需。规定被搜索的字符串。
search

必需。规定所搜索的字符串。

如果此参数是数字,则搜索匹配此数字对应的 ASCII 值的字符。

before_search

可选。默认值为 "false" 的布尔值。

如果设置为 "true",它将返回 search 参数第一次出现之前的字符串部分。

示例

<?php
echo strstr("Hello world!","world",true);       //Hello 
?>

3、subchr():同 strstr()

4、strtok(string str,string tokens):返回直到遇到tokens之前的所有内容

语法:

strtok(string,split)

参数说明:

string必需。规定要分割的字符串。
split必需。规定一个或多个分割字符。

示例

<?php
$string = "Hello world. Beautiful day today.";
$token = strtok($string, " ");

while ($token !== false)
{
echo "$token<br>";
$token = strtok(" ");
}
?>
Hello
world.
Beautiful
day
today.

5、strstr函数区分大小写 如果想不区分就要使用stristr函数了

语法:

strstr(string,search,before_search)

参数说明:

string必需。规定被搜索的字符串。
search

必需。规定所搜索的字符串。

如果此参数是数字,则搜索匹配此数字对应的 ASCII 值的字符。

before_search

可选。默认值为 "false" 的布尔值。

如果设置为 "true",它将返回 search 参数第一次出现之前的字符串部分。

示例

<?php

    //查找 "Shanghai" 在 "I love Shanghai!" 中的第一次出现,并返回字符串的剩余部分:
    echo strstr("I love Shanghai!","Shanghai");     echo "<br/>";    //Shanghai!


    //以 "o" 的 ASCII 值搜索字符串,并返回字符串的剩余部分:
    echo strstr("Hello world!",111);    echo "<br/>";                //o world!

    //返回 "world" 第一次出现之前的字符串部分:
    echo strstr("Hello world!","world",true);                       //Hello 

?>

6、strrchr():查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符

语法:

strrchr(string,char)

参数说明:

string必需。规定要搜索的字符串。
char必需。规定要查找的字符。如果该参数是数字,则搜索匹配此数字的 ASCII 值的字符。

示例

<?php
    //搜索 "What" 在字符串中的位置,并返回从该位置到字符串结尾的所有字符:
    echo strrchr("Hello world! What a beautiful day!","What");    //What a beautiful day!
    echo "<br/>";

    //以 "o" 的 ASCII 值搜索 "o" 在字符串中的位置,并返回从该位置到字符串结尾的所有字符:
    echo strrchr("Hello world!",101);            //ello world!
?>

 

(七)字符串替换

substr_replace():把字符串的一部分替换为另一个字符串

str_replace():使用一个字符串替换字符串中的另一些字符

str():转换指定字符

1、substr_replace():把字符串的一部分替换为另一个字符串

语法:

substr_replace(string,replacement,start,length)

参数说明:

 

示例

<?php
    //把 "Hello" 替换成 "world":
    echo substr_replace("Hello","world",0);
?>

2、str_replace():使用一个字符串替换字符串中的另一些字符

语法:

str_replace(find,replace,string,count)

参数说明:

string必需。规定要检查的字符串。
replacement必需。规定要插入的字符串。
start

必需。规定在字符串的何处开始替换。

  • 正数 - 在字符串中的指定位置开始替换
  • 负数 - 在从字符串结尾的指定位置开始替换
  • 0 - 在字符串中的第一个字符处开始替换
length

可选。规定要替换多少个字符。默认是与字符串长度相同。

  • 正数 - 被替换的字符串长度
  • 负数 - 表示待替换的子字符串结尾处距离 string 末端的字符个数。
  • 0 - 插入而非替换

示例

<?php
    //把 "Hello" 替换成 "world":
    echo substr_replace("Hello","world",0);
?>

2、str():转换指定字符

语法:

substr_replace(string,replacement,start,length)

参数说明:

string必需。规定要检查的字符串。
replacement必需。规定要插入的字符串。
start

必需。规定在字符串的何处开始替换。

  • 正数 - 在字符串中的指定位置开始替换
  • 负数 - 在从字符串结尾的指定位置开始替换
  • 0 - 在字符串中的第一个字符处开始替换
length

可选。规定要替换多少个字符。默认是与字符串长度相同。

  • 正数 - 被替换的字符串长度
  • 负数 - 表示待替换的子字符串结尾处距离 string 末端的字符个数。
  • 0 - 插入而非替换

示例

<?php
    //把 "Hello" 替换成 "world":
    echo substr_replace("Hello","world",0);
?>

(八)字符串大小写转换

ucwords(string) //每个单词首字母大写
ucfirst(string) //字符串第一个字母大写
strtolower(string) //字符串转换成小写
strtoupper(string) //字符串转换成大写

(九)字符串计算

strlen():取得字符串的长度  

mt_strlen():指定字符集

strpos():定位字符串第一次出现的位置

strrpos():定位字符串最后一次出现的位置

count_chars(string str[,mode]):字符串中字符计数

str_word_count(string str[,int format]):字符串中单词总数计数

(十)字符串 XHTML 格式化显示

nl2br():将换行符 n 转换成 XHTML 换行符 

htmlspecialchars():把一些特殊字符转换为 HTML 实体

htmlspecialchars_decode():把一些 HTML 实体转换为特殊字符,htmlspecialchars() 的反函数

(十一)字符串存储(转义)

addslashes():对特殊字符加上转义字符。

stripslashes():addslashes() 的反函数。

(十二)加密:

md5():以 32 字符十六进制数字形式返回散列值

md5_file():成功返回字符串,否则返回false

sha1():返回 sha1 散列值字符串

sha1_file():成功返回字符串,否则返回false

处理字符串大小写:

strtolower(string str):将字符串全部转换为小写

strtoupper(string str):将字符串全部转化为大写

ucfirst(string str):将字符串第一个字符大写

ucwords(string str):把字符串中每个单词的首字符转换为大写

(十三)保留两位小数的三种方法

/**
 * PHP保留两位小数的几种方法
 * @link http://www.phpddt.com
 */
$num = 10.4567;

//第一种:利用round()对浮点数进行四舍五入
echo round($num,2);  //10.46

//第二种:利用sprintf格式化字符串
$format_num = sprintf("%.2f",$num);
echo $format_num;  //10.46

//第三种:利用千位分组来格式化数字的函数number_format()
echo number_format($num, 2);  //10.46
//或者如下
echo number_format($num, 2, '.', '');  //10/46

(十四)数据类型转换(字符转数字,数字转字符)

PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:

  • (int)、(integer):转换成整形
  • (float)、(double)、(real):转换成浮点型
  • (string):转换成字符串
  • (bool)、(boolean):转换成布尔类型
  • (array):转换成数组
  • (object):转换成对象

PHP数据类型有三种转换方式:

  • 在要转换的变量之前加上用括号括起来的目标类型
  • 使用3个具体类型的转换函数,intval()、floatval()、strval()   【记忆:想转换的目的类型+val()】
  • 使用通用类型转换函数settype(mixed var,string type)

 第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)

$num1=3.14;   
$num2=(int)$num1;   
var_dump($num1); //输出float(3.14)   
var_dump($num2); //输出int(3)   

第二种转换方式:  intval()  floatval()  strval()

$str="123.9abc";   
$int=intval($str);     //转换后数值:123   
$float=floatval($str); //转换后数值:123.9   
$str=strval($float);   //转换后字符串:"123.9"    

第三种转换方式:  settype();

$num4=12.8;   
$flg=settype($num4,"int");   
var_dump($flg);  //输出bool(true)   
var_dump($num4); //输出int(12)   

(十五)获取数组最后一个值的几种方法

$array=array(1,2,3,4,5);    
echo $array[count($array)-1];//计算数组长度,然后获取数组最后一个元素,如果数组中最后一个元素含有非数字键名,结果可能跟预期不符合    
//适用于键名为数字的数组    
echo '<br>';    
echo end($array);//将数组的内部指针指向最后一个单元,适用于所有数组    

总体来说,php的内置函数end还是最好的方法的了。大家可以测试下。

PHP取值很容易,可以使用循环遍历、类指针(个人称之),但是如果去数组最后一个值的时候也采用遍历的话是不是消耗了很多性能啊??

下面有三种取值方法可以更好的取出数组的最后一个值:

$array = array(1,2,4,6,8);
echo end($array);

$array = array(1,2,4,6,8);
echo array_pop($array);
 
$array = array(1,2,4,6,8);
$k = array_slice($array,-1,1);
print_r($k);  //结果是一维数组

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值