看到一行这样的代码,笑抽了
//去除最后的&
$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 中就这么干的- -
难道还有更简单的方法? |
4
jakehu May 27, 2016
//去除最后的&
$str = substr($str, 0, count($str) - 1); |
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
有一种玄学的感觉
|
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 居然对了。。。
|