扫描二维码,下载安卓APP
下载安卓APP箭头
客服QQ
箭头给我发消息

客服QQ:2698585038
论坛 >编程语言 >PHP源码阅读:trim、rtrim、ltrim 函数

PHP源码阅读:trim、rtrim、ltrim 函数

课课家iOS游客发布于 2017-07-04 10:32查看:8086回复:1

        trim 系列函数是用于去除字符串中首尾的空格或其他字符。ltrim 函数只去除掉字符串首部的字符,rtrim函数只去除字符串尾部的字符。

     trim

1499134020589389.jpg

    参数说明

       character_mask 默认是” tnrx0B”等空白字符。

       使用..可以指定一段范围的字符。此处要注意,”..”左右两边是一对合法的范围值,如果传递的是非法的值会报错。

     运行示例

        先来看看用正常的使用

1499134054325537.jpg

        一个比较诡异的结果。这里报错是因为php把..左右两边看作是范围值,而此处’..’左边是字符’.’,PHP内部将认为其是一个缺少右边界的范围值。

1499135352100806.jpg

        第二个参数使用合法的边界值:

1499135423103893.jpg

      trim执行步骤

        trim、ltrim、rtrim三个函数都是调用了php_do_trim函数,区别在于第二个参数mode的不同。本文主要对trim函数进行分析,ltrim和rtrim函数跟trim的类似。然后php_do_trim会调用了php_trim来实现功能,因此trim函数的核心函数时php_trim函数。其执行步骤如下:

        1、根据what的值设置保存过滤字符的mask数组

        2、过滤在字符串首部的待过滤字符

        3、过滤在字符串尾部的待过滤字符


        php_trim函数执行的流程图如下:

1499135491824034.png

        源码解读

        php_trim函数先调用了php_charmask,这个函数试将过滤字符设置为mask[char] = 1的形式,这样就是一个哈希数组,然后可用于后面的判断。如果第二个参数是范围值时,调用了memset函数给mask数组赋值。

        在用mode变量判断是哪种过滤时,此处有一个小优化,在PHP内部使用的是与运算,而不是多个的判断条件。该部分代码如下:

1499135513285224.jpg

        判断的过程:

        1 && 1 == 1 左边需要过滤

        2 && 1 == 0 左边不需要过滤

        3 && 1 == 1 左边需要过滤

        1 && 2 == 0 右边不需要过滤

        2 && 2 == 1 右边需要过滤

        3 && 2 == 1 右边需要过滤


        像这样使用位操作可以提高程序的效率,而且代码更加简洁易读。

收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

版主推荐

    共有1条评论

    • Mr ken
    • YUI
    • cappuccino
    • mr jack
    • IT宅男
    • Mright
    • 选择版块:

    • 标题:

    • 内容

    • 验证码:

    • 标题:

    • 内容

    • 选择版块:

    移动帖子x

    移动到: