V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
wucao219101
V2EX  ›  PHP

哥们你代码写的真幽默

  •  6
     
  •   wucao219101 · May 27, 2016 · 11724 views
    This topic created in 3627 days ago, the information mentioned may be changed or developed.

    看到一行这样的代码,笑抽了

    //去除最后的&
    $str = substr($str, 0, count($str) - 2);
    
    Supplement 1  ·  May 27, 2016

    count函数用来计算数组长度,用在string上返回值固定是1而不是字符串长度。

    $str = substr($str, 0, count($str) - 2);

    实际上相当于

    $str = substr($str, 0, -1);

    然而这行代码的Niubility之处是计算结果居然是正确的,第三个参数是负数就表示从末尾计算长度,也就是截取掉最后一位。

    这行代码已经在线上运行很久了。

    @500miles 给出的作者的心理历程...

    81 replies    2016-07-24 11:02:11 +08:00
    a342191555
        1
    a342191555  
       May 27, 2016
    嗯?我在 JAVA 中就这么干的- -
    难道还有更简单的方法?
    hellojinjie
        2
    hellojinjie  
       May 27, 2016 via Android
    为啥笑,不应该是这样嘛
    jakehu
        3
    jakehu  
       May 27, 2016
    嗯?我在 PHP 中就这么干的- -
    难道还有更简单的方法?
    jakehu
        4
    jakehu  
       May 27, 2016
    //去除最后的&
    $str = substr($str, 0, count($str) - 1);
    b821025551b
        5
    b821025551b  
       May 27, 2016
    这个拼接参数吧,
    @a342191555 PHP 有一对函数叫 implode 和 explode
    kingwrcy
        6
    kingwrcy  
       May 27, 2016
    为啥是-2,不是-1 吗?
    soudesuka
        7
    soudesuka  
       May 27, 2016
    直接写 -2 就可以了,在 PHP 里
    shiny
        8
    shiny  
    PRO
       May 27, 2016
    rtrim?
    thurstan
        9
    thurstan  
       May 27, 2016
    rtrim($str,'&');
    linauror
        10
    linauror  
       May 27, 2016
    php
    substr($str, 0, -1);
    soudesuka
        11
    soudesuka  
       May 27, 2016
    //去除最后的&
    $str = substr($str, 0, -1);
    zhangfan
        12
    zhangfan  
       May 27, 2016
    我没看懂,能否帮忙解释一下?
    shuding
        13
    shuding  
       May 27, 2016
    槽点是 - 2 , substr 第三个参数应该是 length 。
    a342191555
        14
    a342191555  
       May 27, 2016
    @b821025551b 如果$str 其它位上也有&,拼接起来也麻烦。。
    odirus
        15
    odirus  
       May 27, 2016   ❤️ 1
    @a342191555 Java 里面推荐 Apache Commons Lang 的一些工具, StringUtils 里面有大量现成的工具。
    somnus
        16
    somnus  
       May 27, 2016
    忍一忍风平浪静
    nanguo
        17
    nanguo  
       May 27, 2016
    也许有个空格也说不定所以用-2
    endoffight
        18
    endoffight  
       May 27, 2016
    ```
    $str[strlen($str)-1]=''; //多简单
    ```
    rekulas
        19
    rekulas  
       May 27, 2016   ❤️ 1
    count(String) === 1
    count($str) - 2 这个始终等于-1
    so...
    wucao219101
        20
    wucao219101  
    OP
       May 27, 2016
    8bit
        21
    8bit  
       May 27, 2016
    @thurstan 如果含多个&,就不行了吧
    wucao219101
        22
    wucao219101  
    OP
       May 27, 2016
    @rekulas 正解
    kingwrcy
        23
    kingwrcy  
       May 27, 2016
    不懂 php,php 的 count 不是求字符串长度吗?
    hlg002
        24
    hlg002  
       May 27, 2016
    好多人入坑, count 只能 count array 如果非数组 返回的是 1 吧
    kingwrcy
        25
    kingwrcy  
       May 27, 2016
    醉了,count() 函数返回数组中元素的数目。

    count 还能用在 string 上?这也不报错?我大 java 早报错了.
    hlg002
        26
    hlg002  
       May 27, 2016
    @hlg002 这还是个面试题,” count('1234'); 返回什么?“
    当初有人回答:这逼题目,怎么可能把 count 的参数传为字符串
    littleshy
        27
    littleshy  
       May 27, 2016   ❤️ 1
    python 爽啊。 str[:-1]
    500miles
        28
    500miles  
       May 27, 2016   ❤️ 2
    就怕别人看懂自己代码.... ..

    $num = 1 就必须得写成 $num = ( 99 - 199 - 3 + 2 * 55 ) - 20 + 7 * 2
    xujif
        29
    xujif  
       May 27, 2016   ❤️ 1
    rtrim 是干嘛用的
    a412739861
        30
    a412739861  
       May 27, 2016
    Python 大法好,直接切片器……[1234:-1],前面正着数,后面倒着数,只要不超,就都行
    jamiesun
        31
    jamiesun  
       May 27, 2016
    python 大法好 "hello&"[:-1],想不到号称天下第一的 php 写起来如此麻烦,还是不要学了。
    500miles
        32
    500miles  
       May 27, 2016   ❤️ 20
    肯定是想 strlen($str) - 1

    但是误写成 count($str) - 1 了

    完了一看, 最后一个 & 没截掉啊,

    于是 又改成 count($str) - 2 了

    结果 歪打正着, 然后就翻篇了,

    这绝逼是 作者当时的心理历程
    y10n
        33
    y10n  
       May 27, 2016
    * 不管用 count 能不能取到长度,都建议用 strlen,这样能够语意化的体现你的意图,代码即文章嘛。实测确实 count 得不到字符串的长度了...
    * 只去掉最后一个&的话 substr('aa&', 0, -1)这样子就行了,很直观,负距离这个词不算污吧?
    * rtrim('aa&', '&')我觉得是最好的,毕竟万一后面有两个'&'你就不去掉?
    wdhwg001
        34
    wdhwg001  
       May 27, 2016 via iPhone
    #面试官筛人参考#
    wdhwg001
        35
    wdhwg001  
       May 27, 2016 via iPhone
    @500miles “啊,很正常嘛,位置从 0 开始所以是-2 嘛”
    est
        36
    est  
       May 27, 2016
    @500miles 我看你这个看懂了。
    tuimaochang
        37
    tuimaochang  
       May 27, 2016
    千万不要动稳定运行的代码
    wucao219101
        38
    wucao219101  
    OP
       May 27, 2016
    @tuimaochang 这个,有理由不改吗?
    hisway
        39
    hisway  
       May 27, 2016
    @500miles 一定就是这样,哈哈哈
    hvn0413
        40
    hvn0413  
       May 27, 2016 via iPhone
    楼主有才
    soudesuka
        41
    soudesuka  
       May 27, 2016
    @500miles 厉害厉害!原来是这样,哈
    kideny
        42
    kideny  
       May 27, 2016
    别嘲笑别人,万一哪天你加班到凌晨,说不定也会这样。
    mahone3297
        43
    mahone3297  
       May 27, 2016
    @500miles 高手,原来如此。
    Troevil
        44
    Troevil  
       May 27, 2016
    @500miles 完美重现 😂
    Patrick95
        45
    Patrick95  
       May 27, 2016
    哈哈哈哈哈哈哈
    shiny
        46
    shiny  
    PRO
       May 27, 2016
    蛤蛤蛤蛤懂了
    tuimaochang
        47
    tuimaochang  
       May 27, 2016
    @wucao219101 开个玩笑,这是代码界的玄学。
    xhowhy
        48
    xhowhy  
       May 27, 2016 via iPhone
    破 php 程序员 鄙视下
    clockwerk
        49
    clockwerk  
       May 27, 2016
    有一种玄学的感觉
    minbaby
        50
    minbaby  
       May 27, 2016   ❤️ 4
    你见过 $num + 0 的写法么, 目的仅仅是为了把字符串转成数字
    bdbai
        51
    bdbai  
       May 27, 2016 via Android
    @minbaby js 大法表示 !!var 把变量转成布尔值
    quericy
        52
    quericy  
       May 27, 2016
    66666 ,这确实是玄学
    @minbaby 我就这样写过~~~对,就是以前加班的时候写的 23333 @kideny
    jhdxr
        53
    jhdxr  
       May 27, 2016
    @a412739861
    @jamiesun
    php 也是可以倒着数的。。。你语言再强大也拦不住想 SB 的程序员。。。
    Mutoo
        54
    Mutoo  
       May 27, 2016
    [0, len - 1 - 1]
    tscat
        55
    tscat  
       May 27, 2016
    @minbaby 写 JAVA 的时候。。我经常把一个 int+""
    pubby
        56
    pubby  
       May 27, 2016
    @minbaby 经常 $num*1
    alexapollo
        57
    alexapollo  
       May 27, 2016
    强烈建议 V2EX 做高赞评论置顶
    young
        58
    young  
       May 27, 2016
    奇技淫巧
    liushuaikobe
        59
    liushuaikobe  
       May 27, 2016
    完美的双关啊!
    soland
        60
    soland  
       May 27, 2016
    用错误的方法得到正确的结果。
    eoo
        61
    eoo  
       May 27, 2016 via Android
    @kingwrcy php 的 strlen 函数才是计算字符串长度
    heeryuy
        62
    heeryuy  
       May 27, 2016
    @tscat 用来转字符串的吧。。。以前有个同事在 C#里也这么用
    eoo
        63
    eoo  
       May 27, 2016 via Android
    能正常运行就行何处纠结, php 本来就是弱类型语言,作用一些奇淫技巧达到目的,非得按部就班? 我估计你还没看过 JavaScript 的奇淫技巧。
    msg7086
        64
    msg7086  
       May 28, 2016
    @eoo 错误使用函数也能叫奇淫技巧了啊?
    neoblackcap
        65
    neoblackcap  
       May 28, 2016
    @bdbai 很正常的用法啊, angular 或者 lodash 里面就有,谁叫 js 的 undefined 没办法简单判断
    franklinyu
        66
    franklinyu  
       May 28, 2016
    @neoblackcap 我是 JavaScript 新人,請教一下不可以 var == undefined 麼?
    eoo
        67
    eoo  
       May 28, 2016
    @msg7086 可能人家就是计算数组长度呢?
    eoo
        68
    eoo  
       May 28, 2016
    @msg7086 楼上说笑了, 我已经说得很明白了, php 本来就是弱类型语言,只要没有语法错误,只要能达到自己想要的结果就行,没必要搞定像 JAVA 那样,毕竟每个写 PHP 的人水平和思想都不一样,不然怎么说 php 是世界上最好的语言 ,啊哈哈啊啊哈哈。
    wucao219101
        69
    wucao219101  
    OP
       May 28, 2016 via iPad
    @tuimaochang 你也很幽默
    500miles
        70
    500miles  
       May 28, 2016
    一觉睡醒 这么多赞......

    这是要成网红的节奏啊 233333
    muziyue
        71
    muziyue  
       May 28, 2016
    @y10n 你不说我也没发现负距离这个词很污
    neoblackcap
        72
    neoblackcap  
       May 28, 2016
    @franklinyu 可以当然是可以,但是写两个感叹号不是更简洁?
    Oracle
        73
    Oracle  
       May 28, 2016
    Ruby 除了能用-1 ,还可以这么搞
    str['&'] = ''
    franklinyu
        74
    franklinyu  
       May 28, 2016
    @neoblackcap 總還是覺得「簡潔」沒有「明晰」來得重要…… 所以我果然還是比較適合寫強類型語言?
    minbaby
        75
    minbaby  
       May 28, 2016
    @pubby 果断给赞 233333
    minbaby
        76
    minbaby  
       May 28, 2016
    @quericy 🐂 233333
    assassinpig
        77
    assassinpig  
       May 28, 2016
    不错 一开始也晃了下小弟
    pengfei
        78
    pengfei  
       May 28, 2016
    php 是宇宙最好的语言 虽然我不会
    yongSir
        79
    yongSir  
       May 30, 2016   ❤️ 1
    php 高级黑
    geeksnail
        80
    geeksnail  
       Jul 15, 2016
    这都能蒙上 233333
    mingyun
        81
    mingyun  
       Jul 24, 2016
    count 居然对了。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   787 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 203ms · UTC 20:20 · PVG 04:20 · LAX 13:20 · JFK 16:20
    ♥ Do have faith in what you're doing.