关键词搜索

源码搜索 ×
×

《PHP 7从零基础到项目实战》学习笔记4——字符串

发布2020-05-31浏览390次

详情内容

1.单引号和双引号的区别

在使用单引号字符串时,字符串中需要转义的特殊字符只有反斜杠和单引号本身,单引号不能识别插入的变量。相比双引号,这种定义字符串的方式不但直观而且速度快。

<?php
echo 'hello world \\ test'; // hello world \ test

// 转义单引号
echo 'let\'s go'; // let's go

echo 'This is a test'; // This is a test

$a = 'hello';

// 单引号不会解析变量$a的值
echo '$a world'; // $a world

echo "$a world"; // hello world
?>

    使用双引号定义的字符串可以解析其中的变量。双引号还有一些转义序列,如表1-1所示。

    表1-1 双引号转义序列
    | 转义序列 | 字符 | 转义序列 | 字符 | | :------: | :----: | :------: | :------: | | \n | 换行符 | \\\ | 反斜杠 | | \r | 回车符 | \\$ | 美元符号 | | \t | 制表符 | \\" | 双引号 |
    <?php
    echo "I dont't like\ it\\"; // I dont't like\ it\
    
    echo "It takes me \$10.25 \t"; // It takes me $10.25
    
    $name = 'test';
    
    echo "\"$name\" is important"; // "test" is important
    
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.字符串连接符

    PHP中使用“.”来连接两个字符串。

    <?php
    $str1 = 'hello';
    $str2 = ' world';
    echo $str1.$str2; // hello world
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.字符串操作

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

    3.1改变字符串大小写

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

    • Ucfirst将字符串首字母转换成大写
    • Lcfirst将字符串首字母转换成小写
    • Ucwords将字符串中每个单词的首字母转换成大写
    • Strtoupper将字符串转换成大写
    • Strtolower将字符串转换成小写
    <?php
    $str = 'hello world, php'."\n";
    echo ucfirst($str); // Hello world, php
    echo ucwords($str); // Hello World, Php
    echo strtoupper($str); // HELLO WORLD, PHP
    
    $str2 = "Hello World";
    echo strtolower($str2); // hello world
    echo lcfirst($str2); // hello World
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.2查找字符串

    3.2.1 stripos

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

    语法如下:

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

    参数说明

    • haystack:在该字符串中查找
    • needle:needle可以是单字符或多字符测字符串。如果needle不是一个字符串,它将被转换成整型,并被视为字符串顺序值。
    • offset:指定从haystack中开始查找的位置,返回的位置数字值仍然相对于haystack的起始位置。(字符串位置起始于0)
    <?php
    $c = 'c';
    $str1 = 'xyz';
    $str2 = 'ABC';
    $pos1 = stripos($str1, $c);
    $pos2 = stripos($str2, $c);
    var_dump($pos1); // bool(false)
    var_dump($pos2); // int(2)
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.2.2 strpos

    查找字符串首次出现的位置(区分大小写)。

    语法如下:

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

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

    <?php
    $find = 'c';
    $f1 = 'C';
    $str = 'AbcaBC';
    $pos1 = strpos($str, $find);
    $pos2 = strpos($str, $f1);
    var_dump($pos1); // int(2)
    var_dump($pos2); // int(5)
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.2.3 strripos

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

    语法如下:

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

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

    <?php
    $f1 = 'w';
    $f2 = 'e';
    $str = 'Hello World';
    $pos1 = strripos($str, $f1);
    $pos2 = strripos($str, $f2);
    var_dump($pos1); // int(6)
    var_dump($pos2); // int(1)
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.2.4 strrpos

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

    语法如下:

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

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

    <?php
    $f1 = 'c';
    $f2 = 'C';
    $str = 'ABCabcCBA';
    $pos1 = strrpos($str, $f1);
    $pos2 = strrpos($str, $f2);
    $pos3 = strrpos($str, $f2, -5);
    var_dump($pos1); // int(5)
    var_dump($pos2); // int(6)
    var_dump($pos3); // int(2)
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.3替换字符串

    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])
    
    • 1

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

    <?php
    $str = 'hello, world, hello, php';
    $replace = 'hi';
    $search = 'hello';
    echo str_ireplace($search, $replace, $str); // hi, world, hi, php
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.3.2 substr_replace()函数

    substr_replace()函数的语法如下:

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

    说明:

    • substr_replace()在字符串string的副本中将由start和可选的length参数限定的子字符串使用replacement进行替换。
    • 如果start为正数,替换将从string的start位置开始。
    • 如果start为负数,替换将从string的倒数第start个位置开始。
    • 如果设定了length参数,且为正数,则表示string中被替换的子字符串的长度。
    • 如果length设置为负数,则表示代替换的子字符串结尾处距离string末尾的字符个数。如果没有提供此参数,默认为strlen(string)(字符串的长度)
    <?php
    $str = 'hello, world, java, php, python, hello';
    $replace = 'hi';
    echo substr_replace($str, $replace, 0, 6); // hi world, java, php, python, hello
    echo "\n";
    echo substr_replace($str, $replace, 0, -1); // hio
    echo "\n";
    echo substr_replace($str, $replace, -1, 6); // hello, world, java, php, python, hellhi
    echo "\n";
    echo substr_replace($str, $replace, 0); // hi
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.4 截取字符串

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

    string substr(stirng $string, int $start [, int $length])
    
    • 1

    说明:

    • 其作用是返回字符串string由start和length参数指定的长度为length的子字符串。
    • 如果start是非负数,返回的字符串将从string的start位置开始(从0开始计算)。
    • 如果start是负数,返回的字符串将从string末尾处向前数第start个字符串开始。
    • 如果string的长度小于等于start,则返回false.
    <?php
    $str = 'Seek the truth from facts.This is a test!';
    echo substr($str, 1)."\n"; // eek the truth from facts.This is a test!
    // 从末尾开始数第三个位置,开始截取
    echo substr($str, -3)."\n"; // st!
    echo substr($str, -2, 1)."\n"; // t
    echo substr($str, 15)."\n"; // from facts.This is a test!
    var_dump(substr($str, 50)); // bool(false)
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    在PHP中,

    • 使用trim()函数可以去除字符串首尾两边的空格或特殊字符
    • 使用ltrim()函数可以去除字符串 左边的空格或特殊字符
    • 使用rtrim()函数可以去除字符串右边的空格或特殊字符
    string trim(string $str [, string $character_mask])
    string ltrim(string $str [, string $character_mask])
    string rtrim(string $str [, string $character_mask])
    
    • 1
    • 2
    • 3

    其中,$str是待处理的字符串,$character_mask是过滤字符串。如果不指定这两个参数,trim()将去除以下字符:

    • " ",普通空格符
    • “\t”,制表符
    • “\n”,换行符
    • “\r”,回车符
    • “\0”,空字符串
    • “\x0B”,垂直制表符
    <?php
    $text = "\t\tThese are a few words:)... ";
    $binary = "\x09Example string\x0A";
    $hello = "Hello World!";
    echo trim($text)."\n"; // These are a few words:)...
    echo rtrim($text)."\n"; //		These are a few words:)...
    echo rtrim($text, " \t.")."\n"; // 		These are a few words:)
    echo ltrim($hello, "H")."\n"; // ello World!
    // 删除$binary末端的ASCII码控制字符(包含0~31)
    echo rtrim($binary, "\x00..\x1F")."\n"; // 	Example string
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    These are a few words:)...
    		These are a few words:)...
    		These are a few words:)
    ello World!
    	Example string
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.6 计算字符串的长度

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

    int strlen(string $string)
    
    • 1
    <?php
    $str1 = 'abcdefg';
    echo strlen($str1); // 7
    $str2 = ' ab cd ';
    echo strlen($str2); // 7
    
    /**
     * PHP不同编码下,一个中文占的字符长度不同。
     * 1.GBK/gb2312:2个
     * 2.UTF-8/unicode:3个
     */
    $str3 = '这是个测试';
    echo strlen($str3); // 15
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    使用mb_strlen()函数统计字符串长度。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

    mb_strlen ( string `$str` [, string `$encoding` = mb_internal_encoding() ] )
    
    • 1
    • str:要检查长度的字符串。
    • encoding:参数为字符编码。如果省略,则使用内部字符编码。

    3.7 转义和还原字符串

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

    string addslashes(string $str)
    
    • 1

    **说明:**该函数返回转移后的字符串,在一些特殊字符前加了转移符号“\”。这些字符是:单引号、双引号、反斜杠和NULL。

    <?php
    $str = "I'm fine.Thank you";
    echo addslashes($str); // I\'m fine.Thank you
    ?>
    
    • 1
    • 2
    • 3
    • 4

    stripslashes可以还原经过addslashes转义后的字符串。

    <?php
    $str = "I'm fine.Thank you";
    echo addslashes($str); // I\'m fine.Thank you
    echo stripslashes(addslashes($str)); // I'm fine.Thank you
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.8重复一个字符串

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

    string str_repeat(string $input, int $multiplier)
    
    • 1

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

    <?php
    echo str_repeat("^_^", 5); // ^_^^_^^_^^_^^_^
    ?>
    
    • 1
    • 2
    • 3

    3.9 随机打乱字符串

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

    string str_shuffle(string $str)
    
    • 1

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

    <?php
    $str = 'abcdefg123';
    echo str_shuffle($str)."\n";
    echo str_shuffle($str)."\n";
    echo str_shuffle($str)."\n";
    echo str_shuffle($str)."\n";
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    132bfdeagc
    dfc132geba
    ge1f2d3cab
    cdeag2f3b1
    
    • 1
    • 2
    • 3
    • 4

    3.10 分割字符串

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

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

    **说明:**此函数返回由字符串组成的数组,每一个元素都是 s t r i n g 的 子 串 , 它 们 被 字 符 串 d e l i m i t e r 作 为 边 界 点 分 割 出 来 。 string的子串,它们被字符串delimiter作为边界点分割出来。 stringdelimiterdelimiter表示分割字符,如果设置了limit参数且是正数,则返回的数组最多包含limit个元素,而最后那个元素将包含$string剩余的部分。如果limit参数为负数,则返回除最后的-limit个元素外的所有元素。如果limit为0,则会被当作1。

    <?php
    $color = "red green blue";
    $colors = explode(" ", $color);
    print_r($colors);
    $input = 'hello, world';
    print_r(explode(', ', $input));
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    Array
    (
        [0] => red
        [1] => green
        [2] => blue
    )
    Array
    (
        [0] => hello
        [1] => world
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    参考链接:
    https://www.cnblogs.com/ryanzheng/p/8285113.html
    https://www.jb51.net/article/163832.htm


    往期文章:

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载