V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wucao219101
V2EX  ›  PHP

哥们你代码写的真幽默

  •  6
     
  •   wucao219101 · 2016 年 5 月 27 日 · 11529 次点击
    这是一个创建于 3524 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    //去除最后的&
    $str = substr($str, 0, count($str) - 2);
    
    第 1 条附言  ·  2016 年 5 月 27 日

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

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

    实际上相当于

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

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

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

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

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

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

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

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

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

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

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

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

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