关键词搜索

源码搜索 ×
×

PHP字符串操作基础

发布2021-01-23浏览418次

详情内容

第1章 字符串基础知识

1-1 单引号与双引号声明字符串的区别

1-1-1 单引号

// 1.单引号
echo 'Hello world!'; echo '<hr>';
echo 'That\'s good!'; // 单引号中的字符串如出现了单引号,需要转义
echo '<hr>';
echo '生活就像海洋\r\n';
echo '<hr>';
// 如果只想输出反斜线,不需要转义
echo 'C:\temp\'hello.php'; // 单引号会被转义
echo '<hr>';
echo 'C:\temp\\hello.php'; // 将反斜线本身进行转义
echo '<hr>';
$name = 'test';
echo '$name';
echo '<hr>';

    执行结果:

    Hello world!
    That's good!
    生活就像海洋\r\n
    C:\temp'hello.php
    C:\temp\hello.php
    $name
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    总结:

    • 可以声明普通的字符串
    • 只能转义单引号和反斜线
    • 不能解析变量

    1-1-2 双引号

    // 2.双引号
    
    // 可以声明普通字符串
    echo "Hello world!"; echo '<hr>';
    // 字符串中出现单引号,不需要转义
    echo "That's good!";
    echo '<hr>';
    // 如字符串出现了双引号,需要转义
    echo "PHP中文网\"www.php.cn\"";
    echo '<hr>';
    // 双引号中的特殊字符会被解析
    echo "C:\php\demo.php"; echo '<hr>';
    echo "C:\temp\demo.php"; echo '<hr>';
    $name = 'jackson';
    // 双引号中的变量会被解析
    echo "He is $name";
    echo '<hr>';
    
      15
    • 16
    • 17

    执行结果:

    Hello world!
    That's good!
    PHP中文网"www.php.cn"
    C:\php\demo.php
    C: emp\demo.php
    He is jackson
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    总结:

    • 声明一个普通字符串
    • 转义全部的特殊字符
    • 解析变量

    1-2 heredoc和nowdoc语法结构的区别与联系

    <?php
    // 1.heredoc语法结构
    /**
     * 1.可解析变量
     * 2.含双引号不需要转义
     */
    $name = 'PHP中文网';
    echo "www.php.cn $name \r\n";
    echo '<hr>';
    
    echo <<<"EOA"
    www.php.cn "Just so-so" $name \r\n
    EOA;
    echo '<hr>';
    
    // 2.nowdoc 语法结构 PHP 5.3+
    echo 'www.baidu.com \'众里寻他千百度\'';
    echo '<hr>';
    echo <<<'EDO'
    www.baidu.com '众里寻他千百度'
    <form action="index.php" method="get">
    用户名:<input type="text">
    </form>
    EDO;
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    执行结果:

    www.php.cn PHP中文网
    www.php.cn "Just so-so" PHP中文网
    www.baidu.com '众里寻他千百度'
    www.baidu.com '众里寻他千百度'
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    1-3 heredoc与nowdoc初始化局部变量与类属性

    <?php
    // 用heredoc和nowdoc初始化函数变量和类属性
    
    function welcome($lang='PHP')
    {
        $study = <<<"STU"
    我喜欢的编程语言是:$lang
    STU;
    
        // nowdoc语法结构不能解析变量 不能处理特殊字符
        $study = <<<'STU'
    我喜欢的编程语言是:PHP
    STU;
    
    static $hello = <<<"EOD"
    欢迎来到PHP中文网"www.php.cn" \r\n
    EOD;
    
    static $hello2 = <<<'EOD'
    欢迎来到PHP中文网"www.php.cn" \r\n
    EOD;
    return $hello.$study;
    
    }
    echo welcome('JAVA');
    echo '<hr color="color">';
    class Student
    {
        public $name = 'zhangsan';
        public static $alias = <<<"NAME"
    My name is: Zhang san <hr>
    NAME;
        const COUNTRY = <<< COUN
    I'm fine. Thank you! And you?
    COUN;
    }
    echo (new Student())->name; echo '<hr>';
    echo Student::$alias; echo '<hr>';
    echo Student::COUNTRY; echo '<hr>';
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    执行结果:
    在这里插入图片描述

    1-4 变量解析两种语法与实例详解

    <?php
    $siteName = 'PHP中文网';
    //$books = ['php', 'java', 'python'];
    $books = ['course'=>'php', 'java', 'python'];
    
    echo "网站名称是:$siteName";
    echo '<hr>';
    // echo "我负责的课程为 $books[0]";
    // echo "我负责的课程为 $books['course']";
    // 简单语法:$var 复杂语法:{$var}
    echo "我负责的课程为 {$books['course']}";
    echo '<hr color="red">';
    
    class Web
    {
        public $website = 'PHP中文网';
        //public static $domain = 'www.php.cn';
        public static $domain = 'domain';
        //const App = '我的应用';
        const App = 'app';
    }
    $domain = 'www.php.cn';
    $app = '我的应用';
    echo (new Web())->website; echo '<hr>';
    echo Web::$domain; // 普通方法
    echo '<hr>';
    // 复杂方法,间接访问
    echo "${Web::$domain}";
    echo '<hr>';
    echo "${Web::App}";
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    执行结果:
    在这里插入图片描述

    1-5 字符串的增删改查操作

    <?php
    // 字符串的增删改查:将字符串看作数组
    $domain = 'http://www.php.cn';
    
    // 查询
    echo $domain[3]; echo '<hr>';
    echo $domain{3}; echo '<hr>';
    
    // 新增
    echo '字符串长度为'.strlen($domain); echo '<hr>';
    echo $domain;
    $domain{17} = '/'; echo '<hr>';
    echo $domain;
    
    // 更新
    $domain{17} = '?';
    echo '<hr>';
    echo $domain;
    
    // 删除
    //$domain[3] = '';
    $domain[3] = null;
    echo '<hr>';
    echo $domain;
    echo '<hr>';
    echo '字符串长度为'.strlen($domain); echo '<hr>';
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    执行效果:
    在这里插入图片描述

    第2章 字符串函数精讲

    2-1 子串处理substr及相关函数

    <?php
    $siteName = 'PHP中文网';
    $color = 'red';
    
    /**
     * heredoc需要注意的几点:
     * 1.换行,空格会被保留
     * 2.因为不需要对引号进行转义,适合输出大段的HTML代码
     * 3.变量可以自动解析,适合于模板输出
     * 4.如果heredoc或nowdoc与其它字符串拼接,结尾不要加分号
     */
    
    $html = <<<"HTML"
    <h3 style="color: $color">$siteName</h3>
    HTML
    .'www.php.cn';
    
    echo $html;
    echo '<hr>';
    // substr():获取子串的内容
    
    // 1.获取子串:substr($str, $start, $length)
    $website = 'www.baidu.com';
    echo substr($website, 0, 5),'<hr>'; // www.b
    echo substr($website, -3, 3),'<hr>'; // com
    
    // 2.替换子串:substr_replace()
    echo substr_replace($website, 'php', 6, 2),'<hr>'; // www.baphpu.com
    // 将子串长度设置为0,实现无删除的插入
    echo substr_replace($website, '_edu', 9, 0),'<hr>'; // www.baidu_edu.com
    // 设置空子串,实现插入式的删除
    echo substr_replace($website, '', 6, 2),'<hr>'; // www.bau.com
    // 在起始位置插入字符
    echo substr_replace($website, 'website: ', 0, 0),'<hr>'; // website: www.baidu.com
    
    // 3.substr_count():查询字串出现在字符串中的频率(次数)
    $str = "我家后院有两棵树,一棵是枣树,另一棵也是枣树";
    echo substr_count($str, '树'),'<hr>'; // 3
    echo mb_substr_count(mb_substr($str, 0, 20, 'utf-8'), '树'),'<hr>'; // 2
    
    // 4.substr_compare($str,$str1)比较子串
    // 0:相等 <0:第一个子串小于第二个子串 >0:第一个子串大于第二个子串
    echo substr_compare('www.php.cn', 'www.php.cn',0),'<hr>'; // 0
    echo substr_compare('www.php.cn', 'www.baidu.com',0),'<hr>'; // 1
    echo substr_compare('php.cn', 'www.php.cn', 0),'<hr>'; // -1
    echo substr_compare('www.php.cn', 'php.cn', 4),'<hr>'; // 0
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    2-2 字符串检索函数strpos()和strstr()

    <?php
    /**
     * strpos():获取子串的位置,子串检索函数,根据内容查找索引
     */
    $domain = 'www.baidu.com';
    echo strpos($domain, 'bai'),'<hr>'; // 4
    echo strpos($domain, 'd', 5),'<hr>'; // 7
    
    $siteName = "runoob菜鸟教程";
    echo strpos($siteName, '菜'),'<hr>'; // 6
    echo strpos($siteName, '教'),'<hr>'; // 12
    // 使用多字节安全函数mb_,mbString开启
    echo mb_strpos($siteName, '教'),'<hr>'; // 8
    
    // strstr()
    echo strstr($domain, 'b'),'<hr>'; // baidu.com
    echo strstr($domain, 'b', true),'<hr>'; // www.
    echo strstr($domain, 'b', true).strstr($domain,'b'),'<hr>'; // www.baidu.com
    
      15
    • 16
    • 17
    • 18

    2-3 字符串的填充与替换str_pad()和str_replace()

    <?php
    
    // 1.字符串填充 str_pad()
    $input = 'php.cn';
    // 默认使用空格填充
    echo str_pad($input, 10),'<hr>'; // php.cn
    echo str_pad($input, 10, ' ', STR_PAD_RIGHT),'<hr>'; // php.cn
    echo str_pad($input, 10, '*', STR_PAD_LEFT),'<hr>'; // ****php.cn
    echo str_pad($input, 10, '#', STR_PAD_BOTH),'<hr>'; // ##php.cn##
    echo str_pad($input, 6, '#', STR_PAD_BOTH),'<hr>'; // php.cn
    echo str_pad($input, 3, '#', STR_PAD_BOTH),'<hr>'; // php.cn
    
    // 2.str_repeat()字符重复函数
    echo str_repeat('*',10),'<hr>'; // **********
    
    // 3.str_shuffle()随机打乱函数
    echo str_shuffle($input).'<hr>'; // pcnp.h
    
    // 4.str_replace()字符串替换函数
    $email = 'lisi@qq.com';
    echo str_replace('qq', 'sina', $email),'<hr>'; // lisi@sina.com
    
    $fruit_list = 'apple,banana,peach';
    $fruits1 = ['apple', 'banana', 'peach'];
    $fruits2 = ['orange', 'pear'];
    echo $fruit_list.'<hr>'; // apple,banana,peach
    echo str_replace($fruits1, $fruits2, $fruit_list),'<hr>'; // orange,pear,
    echo str_replace('/', '\\', 'C://test/index.php'); // C:\\test\index.php
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2-4 字符串长度统计strlen()和mb_strlen(),mb_strwidth()

    <?php
    // strlen()
    $str = "为什么说php是世界上最好的语言?";
    echo strlen($str),'<hr>'; // 45
    // utf8:3个字节表示一个中文 gbk:2个字节表示一个中文
    echo mb_strlen($str),'<hr>'; // 17
    // 将所有的多字节文字,全部按2字节处理
    echo mb_strwidth($str),'<hr>'; // 31
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2-5 字符串的分割与组合explode()和implode()

    <?php
    // 字符串的分割与组合
    
    $path = 'D://temp/demo/index.php';
    echo '<pre>';
    print_r(explode('/',$path));
    
    $fruits = 'Apple,Orange,Pear,Peach,Watermelon';
    echo '<pre>';
    print_r(explode(',',$fruits));
    
    // implode()将数组拼接成字符串
    $city = implode('---', ['北京', '上海', '南京', '广州']);
    if (is_string($city)) {
        echo '字符串:'.$city;
    } else {
        echo '不是字符串';
    }
    
      15
    • 16
    • 17
    • 18

    执行结果:

    Array
    (
        [0] => D:
        [1] => 
        [2] => temp
        [3] => demo
        [4] => index.php
    )
    Array
    (
        [0] => Apple
        [1] => Orange
        [2] => Pear
        [3] => Peach
        [4] => Watermelon
    )
    字符串:北京---上海---南京---广州
    
      15
    • 16
    • 17

    2-6 字符类型转换

    <?php
    // 字符类型转换
    //echo 300,'<hr>'; // 数值类型的字符串表示
    //echo true,'<hr>'; // true转为字符‘1’
    //echo false,'<hr>'; // false转为字符''
    //echo range(1,5); // Array
    //var_dump(range(1,5));
    //echo (new stdClass()); // 对象不能直接转为字符输出,除非__toString()
    //var_dump(new stdClass());
    //echo fopen('lesson9.php','r'); // Resource id #3
    
    // 1.强制转换,临时转换
    echo gettype(500),'<hr>'; // integer
    echo gettype((string)500),'<hr>'; // string
    echo gettype(strval(500)),'<hr>'; // string
    echo gettype(true).'<hr>'; // boolean
    echo gettype(strval(true)),'<hr>'; // string
    
    // 2.永久转换 settype($val,$type)
    $old = 500;
    echo gettype($old),'<hr>'; // integer
    $current = gettype(settype($old, 'string'));
    echo gettype($current),'<hr>'; // string
    echo gettype($old),'<hr>'; // string
    
    // 3.自动转换,与上下文相关
    echo 150+'35abc','<hr>'; // 185 '35abc'==>35
    echo 150+'abc123','<hr>'; // 150 'abc123'==>0
    echo 150+true,'<hr>'; // 151 true==>1
    echo 150+false,'<hr>'; // 150 false==>0
    echo 150+null,'<hr>'; // 150 null==>0
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    2-7 字符串的格式化函数

    <?php
    //header('content-type:text/html;charset=gbk');
    // 大小写转换
    echo strtolower('HTTP://WWW.BAIDU.COM'),'<br>'; // http://www.baidu.com
    echo strtoupper('http://www.baidu.com'),'<br>'; // HTTP://WWW.BAIDU.COM
    
    // 字符串转时间戳
    date_default_timezone_set('PRC'); // 设置默认时区
    echo strtotime('2021-01-23'),'<hr>'; // 1611331200
    echo date('Y-m-d', 1611331200),'<hr>'; // 2021-01-23
    
    // 千位分隔符,1,234,454,545
    echo number_format(1234567890),'<hr>'; // 1,234,567,890
    // 设置小数位
    echo number_format(3.1415926, 2),'<hr>'; // 3.14
    // 自定义小数点和千位分隔符
    // number_format ($number , $decimals = 0 , $dec_point = '.' , $thousands_sep = ',' )
    echo number_format(31415926.254, 2, '*', '#'),'<hr>'; // 31#415#926*25
    
    
    // ASCII码与整数之间的转换
    // 将整数转为ACSCII码
    echo chr(72),'<hr>'; // H
    echo chr('72'),'<hr>'; // H
    // 将ASCII码转为整数
    echo ord('A'),'<hr>'; // 65
    
    // 字符串的\n换行符转为html中的<br>
    echo "PHP中文网 \n www.php.cn",'<hr>';
    echo nl2br("PHP中文网 \n www.php.cn").'<hr>';
    
    // 编码的转换
    echo iconv('utf-8', 'gbk', 'PHP中文网'),'<hr>';
    
    // 加密
    echo md5(123456),'<hr>'; // e10adc3949ba59abbe56e057f20f883e
    echo sha1(123456),'<hr>'; // 7c4a8d09ca3762af61e59520943dc26494f8941b
    echo md5(md5(123456)); // 14e1b600b1fd579f47433b88e8d85291
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    2-8 字符串内容过滤与转码

    <?php
    // 字符串内容过滤与转码
    
    // trim()函数
    $str = "  www.php.cn  ";
    echo '<pre>';
    echo $str;echo '<hr>'; //  www.php.cn
    // 去除首尾两端空格
    echo trim($str),'<hr>'; //www.php.cn
    // 去除左端空格
    echo ltrim($str),'<hr>'; //www.php.cn
    // 去除右端空格
    echo rtrim($str),'<hr>'; //  www.php.cn
    
    // 对需要转义的特殊字符进行过滤 \r\n\t\0
    $str = " \r\0 www.baidu.com \n\t  ";
    echo $str;echo '<hr>';
    echo trim($str),'<hr>'; // 去除两边的特殊字符
    $str = "www.php.cn";
    echo $str.'<hr>';
    // 过滤掉.cn
    echo trim($str, '.cn'),'<hr>'; // www.php
    
    // strip_tags()过滤掉html标记
    $code = <<< "CODE"
    <h3 style="color:red">$str</h3>
    <p style="color:blue">去除html标记</p>
    CODE;
    echo $code,'<hr>';
    echo strip_tags($code),'<hr>';
    // 保留h3标签
    echo strip_tags($code, '<h3>'),'<hr>';
    
    
    // htmlspecialchars()将特殊字符转为html实体
    // 特殊字符:html代码在有特殊意义的字符,如<,>,&,',"
    // 实体字符:<:&lt; >:&gt; &:&amp; "":&quot; '':&apos;
    
    $html = <<< "HTML"
    <h3 style="color:green">生活就像海洋</h3>
    <p style="color:blue">&nbsp;&nbsp;只有意志坚强的人才能到达彼岸</p>
    HTML;
    echo $html,'<hr>';
    echo htmlspecialchars($html),'<hr>';
    $code = htmlspecialchars($html);
    echo $code;echo '<hr>';
    // 将编码后的数据转码输出
    echo htmlspecialchars_decode($code);
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    在这里插入图片描述

    2-9 字符串的序列化与JSON处理

    <?php
    // json是javascript的对象表示方法
    
    // json_encode()将数组或对象转为json格式的字符串
    $arr = ['id'=>10, 'name'=>'zhangsan', 'gender'=>'male'];
    $obj = new stdClass();
    $obj->name = 'lisi';
    $obj->age = 20;
    // 将数组转为json格式
    echo json_encode($arr),'<hr>'; // {"id":10,"name":"zhangsan","gender":"male"}
    // 将对象转为json格式
    echo json_encode($obj),'<hr>'; // {"name":"lisi","age":20}
    
    // json_decode()将一个json格式的字符串转为PHP对象
    $json = '[
    {"id":11, "name":"Tom", "grade":89},
    {"id":12, "name":"James", "grade":88},
    {"id":13, "name":"Philips", "grade":90}
    ]';
    
    // 将json字符串转为PHP对象
    $jsonObj = json_decode($json);
    echo '<pre>';
    //var_dump($jsonObj);
    print_r($jsonObj);
    echo $jsonObj[2]->name,'<hr>';
    
    // 字符串的序列化:将数组的结构,类型保存到变量或文件中,便于保存或转送
    $user = ['id'=>1, 'username'=>'admin', 'password'=>md5(123456)];
    echo '<pre>';
    print_r($user);
    $admin = serialize($user);
    echo $admin;
    echo '<hr>';
    // 反序列化
    $temp = unserialize($admin);
    print_r($temp);
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    执行结果:

    {"id":10,"name":"zhangsan","gender":"male"}
    {"name":"lisi","age":20}
    Array
    (
        [0] => stdClass Object
            (
                [id] => 11
                [name] => Tom
                [grade] => 89
            )
    
        [1] => stdClass Object
            (
                [id] => 12
                [name] => James
                [grade] => 88
            )
    
        [2] => stdClass Object
            (
                [id] => 13
                [name] => Philips
                [grade] => 90
            )
    
    )
    Philips
    Array
    (
        [id] => 1
        [username] => admin
        [password] => e10adc3949ba59abbe56e057f20f883e
    )
    a:3:{s:2:"id";i:1;s:8:"username";s:5:"admin";s:8:"password";s:32:"e10adc3949ba59abbe56e057f20f883e";}
    Array
    (
        [id] => 1
        [username] => admin
        [password] => e10adc3949ba59abbe56e057f20f883e
    )
    
      15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    相关技术文章

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

    提示信息

    ×

    选择支付方式

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