wucao219101
V2EX  ›  PHP

哥们你代码写的真幽默

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

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

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

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

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

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

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

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

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