看到一行这样的代码,笑抽了
//去除最后的& $str = substr($str, 0, count($str) - 2); 
看到一行这样的代码,笑抽了
//去除最后的& $str = substr($str, 0, count($str) - 2); count函数用来计算数组长度,用在string上返回值固定是1而不是字符串长度。
$str = substr($str, 0, count($str) - 2);
实际上相当于
$str = substr($str, 0, -1);
然而这行代码的Niubility之处是计算结果居然是正确的,第三个参数是负数就表示从末尾计算长度,也就是截取掉最后一位。
这行代码已经在线上运行很久了。
@500miles 给出的作者的心理历程...
1 a342191555 May 27, 2016 嗯?我在 JAVA 中就这么干的- - 难道还有更简单的方法? |
2 hellojinjie May 27, 2016 via Android 为啥笑,不应该是这样嘛 |
3 jakehu May 27, 2016 嗯?我在 PHP 中就这么干的- - 难道还有更简单的方法? |
5 b821025551b May 27, 2016 这个拼接参数吧, @a342191555 PHP 有一对函数叫 implode 和 explode |
6 kingwrcy May 27, 2016 为啥是-2,不是-1 吗? |
7 soudesuka May 27, 2016 直接写 -2 就可以了,在 PHP 里 |
8 shiny PRO rtrim? |
9 thurstan May 27, 2016 rtrim($str,'&'); |
10 linauror May 27, 2016 php substr($str, 0, -1); |
11 soudesuka May 27, 2016 //去除最后的& $str = substr($str, 0, -1); |
12 zhangfan May 27, 2016 我没看懂,能否帮忙解释一下? |
13 shuding May 27, 2016 槽点是 - 2 , substr 第三个参数应该是 length 。 |
14 a342191555 May 27, 2016 @b821025551b 如果$str 其它位上也有&,拼接起来也麻烦。。 |
15 odirus May 27, 2016 @a342191555 Java 里面推荐 Apache Commons Lang 的一些工具, StringUtils 里面有大量现成的工具。 |
16 somnus May 27, 2016 忍一忍风平浪静 |
17 nanguo May 27, 2016 也许有个空格也说不定所以用-2 |
18 endoffight May 27, 2016 ``` $str[strlen($str)-1]=''; //多简单 ``` |
19 rekulas May 27, 2016 count(String) === 1 count($str) - 2 这个始终等于-1 so... |
20 wucao219101 OP |
22 wucao219101 OP @rekulas 正解 |
23 kingwrcy May 27, 2016 不懂 php,php 的 count 不是求字符串长度吗? |
24 hlg002 May 27, 2016 好多人入坑, count 只能 count array 如果非数组 返回的是 1 吧 |
25 kingwrcy May 27, 2016 醉了,count() 函数返回数组中元素的数目。 count 还能用在 string 上?这也不报错?我大 java 早报错了. |
27 littleshy May 27, 2016 python 爽啊。 str[:-1] |
28 500miles May 27, 2016 就怕别人看懂自己代码.... .. $num = 1 就必须得写成 $num = ( 99 - 199 - 3 + 2 * 55 ) - 20 + 7 * 2 |
29 xujif May 27, 2016 rtrim 是干嘛用的 |
30 a412739861 May 27, 2016 Python 大法好,直接切片器……[1234:-1],前面正着数,后面倒着数,只要不超,就都行 |
31 jamiesun May 27, 2016 python 大法好 "hello&"[:-1],想不到号称天下第一的 php 写起来如此麻烦,还是不要学了。 |
32 500miles May 27, 2016 肯定是想 strlen($str) - 1 但是误写成 count($str) - 1 了 完了一看, 最后一个 & 没截掉啊, 于是 又改成 count($str) - 2 了 结果 歪打正着, 然后就翻篇了, 这绝逼是 作者当时的心理历程 |
33 y10n May 27, 2016 * 不管用 count 能不能取到长度,都建议用 strlen,这样能够语意化的体现你的意图,代码即文章嘛。实测确实 count 得不到字符串的长度了... * 只去掉最后一个&的话 substr('aa&', 0, -1)这样子就行了,很直观,负距离这个词不算污吧? * rtrim('aa&', '&')我觉得是最好的,毕竟万一后面有两个'&'你就不去掉? |
34 wdhwg001 May 27, 2016 via iPhone #面试官筛人参考# |
37 tuimaochang May 27, 2016 千万不要动稳定运行的代码 |
38 wucao219101 OP @tuimaochang 这个,有理由不改吗? |
40 hvn0413 May 27, 2016 via iPhone 楼主有才 |
42 kideny May 27, 2016 别嘲笑别人,万一哪天你加班到凌晨,说不定也会这样。 |
43 mahone3297 May 27, 2016 @500miles 高手,原来如此。 |
45 Patrick95 May 27, 2016 哈哈哈哈哈哈哈 |
46 shiny PRO 蛤蛤蛤蛤懂了 |
47 tuimaochang May 27, 2016 @wucao219101 开个玩笑,这是代码界的玄学。 |
48 xhowhy May 27, 2016 via iPhone 破 php 程序员 鄙视下 |
49 clockwerk May 27, 2016 有一种玄学的感觉 |
| div class="fr"> 50 minbaby May 27, 2016 你见过 $num + 0 的写法么, 目的仅仅是为了把字符串转成数字 |
53 jhdxr May 27, 2016 |
54 Mutoo May 27, 2016 [0, len - 1 - 1] |
57 alexapollo May 27, 2016 强烈建议 V2EX 做高赞评论置顶 |
58 young May 27, 2016 奇技淫巧 |
59 liushuaikobe May 27, 2016 完美的双关啊! |
60 soland May 27, 2016 用错误的方法得到正确的结果。 |
63 eoo May 27, 2016 via Android 能正常运行就行何处纠结, php 本来就是弱类型语言,作用一些奇淫技巧达到目的,非得按部就班? 我估计你还没看过 Javascript 的奇淫技巧。 |
65 neoblackcap May 28, 2016 @bdbai 很正常的用法啊, angular 或者 lodash 里面就有,谁叫 js 的 undefined 没办法简单判断 |
66 franklinyu May 28, 2016 @neoblackcap 我是 Javascript 新人,教一下不可以 var == undefined ? |
68 eoo May 28, 2016 @msg7086 楼上说笑了, 我已经说得很明白了, php 本来就是弱类型语言,只要没有语法错误,只要能达到自己想要的结果就行,没必要搞定像 JAVA 那样,毕竟每个写 PHP 的人水平和思想都不一样,不然怎么说 php 是世界上最好的语言 ,啊哈哈啊啊哈哈。 |
69 wucao219101 OP @tuimaochang 你也很幽默 |
70 500miles May 28, 2016 一觉睡醒 这么多赞...... 这是要成网红的节奏啊 233333 |
72 neoblackcap May 28, 2016 @franklinyu 可以当然是可以,但是写两个感叹号不是更简洁? |
73 Oracle May 28, 2016 Ruby 除了能用-1 ,还可以这么搞 str['&'] = '' |
74 franklinyu May 28, 2016 @neoblackcap 是得「」有「明晰」得重要…… 所以我果然是比合型言? |
77 assassinpig May 28, 2016 不错 一开始也晃了下小弟 |
78 pengfei May 28, 2016 php 是宇宙最好的语言 虽然我不会 |
79 yongSir May 30, 2016 php 高级黑 |
80 geeksnail Jul 15, 2016 这都能蒙上 233333 |
81 mingyun Jul 24, 2016 count 居然对了。。。 |