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

哥们你代码写的真幽默

  •  6
     
  •   wucao219101 · 2016-05-27 16:47:00 +08:00 · 10780 次点击
    这是一个创建于 3100 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    //去除最后的&
    $str = substr($str, 0, count($str) - 2);
    
    第 1 条附言  ·  2016-05-27 17:42:51 +08:00

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

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

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

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

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

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

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

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

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