看到一行这样的代码,笑抽了
//去除最后的&
$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 给出的作者的心理历程...
|
a342191555May 27, 2016
1
嗯?我在 JAVA 中就这么干的- -
难道还有更简单的方法? |
|
hellojinjieMay 27, 2016 via Android
2
为啥笑,不应该是这样嘛
|
|
jakehuMay 27, 2016
3
嗯?我在 PHP 中就这么干的- -
难道还有更简单的方法? |
|
jakehuMay 27, 2016
4
//去除最后的&
$str = substr($str, 0, count($str) - 1); |
|
b821025551bMay 27, 2016
5
这个拼接参数吧,
@a342191555 PHP 有一对函数叫 implode 和 explode |
|
kingwrcyMay 27, 2016
6
为啥是-2,不是-1 吗?
|
|
soudesukaMay 27, 2016
7
直接写 -2 就可以了,在 PHP 里
|
|
8
rtrim?
|
|
thurstanMay 27, 2016
9
rtrim($str,'&');
|
|
linaurorMay 27, 2016
10
php
substr($str, 0, -1); |
|
soudesukaMay 27, 2016
11
//去除最后的&
$str = substr($str, 0, -1); |
|
zhangfanMay 27, 2016
12
我没看懂,能否帮忙解释一下?
|
|
shudingMay 27, 2016
13
槽点是 - 2 , substr 第三个参数应该是 length 。
|
|
a342191555May 27, 2016
14
@b821025551b 如果$str 其它位上也有&,拼接起来也麻烦。。
|
|
15
@a342191555 Java 里面推荐 Apache Commons Lang 的一些工具, StringUtils 里面有大量现成的工具。
|
|
somnusMay 27, 2016
16
忍一忍风平浪静
|
|
nanguoMay 27, 2016
17
也许有个空格也说不定所以用-2
|
|
endoffightMay 27, 2016
18
```
$str[strlen($str)-1]=''; //多简单 ``` |
|
19
count(String) === 1
count($str) - 2 这个始终等于-1 so... |
|
20
|
|
22
@rekulas 正解
|
|
kingwrcyMay 27, 2016
23
不懂 php,php 的 count 不是求字符串长度吗?
|
|
hlg002May 27, 2016
24
好多人入坑, count 只能 count array 如果非数组 返回的是 1 吧
|
|
kingwrcyMay 27, 2016
25
醉了,count() 函数返回数组中元素的数目。
count 还能用在 string 上?这也不报错?我大 java 早报错了. |
|
27
python 爽啊。 str[:-1]
|
|
28
就怕别人看懂自己代码.... ..
$num = 1 就必须得写成 $num = ( 99 - 199 - 3 + 2 * 55 ) - 20 + 7 * 2 |
|
29
rtrim 是干嘛用的
|
|
a412739861May 27, 2016
30
Python 大法好,直接切片器……[1234:-1],前面正着数,后面倒着数,只要不超,就都行
|
|
jamiesunMay 27, 2016
31
python 大法好 "hello&"[:-1],想不到号称天下第一的 php 写起来如此麻烦,还是不要学了。
|
|
32
肯定是想 strlen($str) - 1
但是误写成 count($str) - 1 了 完了一看, 最后一个 & 没截掉啊, 于是 又改成 count($str) - 2 了 结果 歪打正着, 然后就翻篇了, 这绝逼是 作者当时的心理历程 |
|
y10nMay 27, 2016
33
* 不管用 count 能不能取到长度,都建议用 strlen,这样能够语意化的体现你的意图,代码即文章嘛。实测确实 count 得不到字符串的长度了...
* 只去掉最后一个&的话 substr('aa&', 0, -1)这样子就行了,很直观,负距离这个词不算污吧? * rtrim('aa&', '&')我觉得是最好的,毕竟万一后面有两个'&'你就不去掉? |
|
wdhwg001May 27, 2016 via iPhone
34
#面试官筛人参考#
|
|
suntoryliquMay 27, 2016
37
千万不要动稳定运行的代码
|
|
38
@tuimaochang 这个,有理由不改吗?
|
|
hvn0413May 27, 2016 via iPhone
40
楼主有才
|
|
kidenyMay 27, 2016
42
别嘲笑别人,万一哪天你加班到凌晨,说不定也会这样。
|
|
mahone3297May 27, 2016
43
@500miles 高手,原来如此。
|
|
Patrick95May 27, 2016
45
哈哈哈哈哈哈哈
|
|
46
蛤蛤蛤蛤懂了
|
|
suntoryliquMay 27, 2016
47
@wucao219101 开个玩笑,这是代码界的玄学。
|
|
xhowhyMay 27, 2016 via iPhone
48
破 php 程序员 鄙视下
|
|
clockwerkMay 27, 2016
49
有一种玄学的感觉
|
|
50
你见过 $num + 0 的写法么, 目的仅仅是为了把字符串转成数字
|
|
jhdxrMay 27, 2016
53
|
|
MutooMay 27, 2016
54
[0, len - 1 - 1]
|
|
alexapolloMay 27, 2016
57
强烈建议 V2EX 做高赞评论置顶
|
|
youngMay 27, 2016
58
奇技淫巧
|
|
liushuaikobeMay 27, 2016
59
完美的双关啊!
|
|
solandMay 27, 2016
60
用错误的方法得到正确的结果。
|
|
eooMay 27, 2016 via Android
63
能正常运行就行何处纠结, php 本来就是弱类型语言,作用一些奇淫技巧达到目的,非得按部就班? 我估计你还没看过 JavaScript 的奇淫技巧。
|
|
neoblackcapMay 28, 2016
65
@bdbai 很正常的用法啊, angular 或者 lodash 里面就有,谁叫 js 的 undefined 没办法简单判断
|
|
franklinyuMay 28, 2016
66
@neoblackcap 我是 JavaScript 新人,請教一下不可以 var == undefined 麼?
|
|
eooMay 28, 2016
68
@msg7086 楼上说笑了, 我已经说得很明白了, php 本来就是弱类型语言,只要没有语法错误,只要能达到自己想要的结果就行,没必要搞定像 JAVA 那样,毕竟每个写 PHP 的人水平和思想都不一样,不然怎么说 php 是世界上最好的语言 ,啊哈哈啊啊哈哈。
|
|
69
@tuimaochang 你也很幽默
|
|
500milesMay 28, 2016
70
一觉睡醒 这么多赞......
这是要成网红的节奏啊 233333 |
|
neoblackcapMay 28, 2016
72
@franklinyu 可以当然是可以,但是写两个感叹号不是更简洁?
|
|
OracleMay 28, 2016
73
Ruby 除了能用-1 ,还可以这么搞
str['&'] = '' |
|
franklinyuMay 28, 2016
74
@neoblackcap 總還是覺得「簡潔」沒有「明晰」來得重要…… 所以我果然還是比較適合寫強類型語言?
|
|
assassinpigMay 28, 2016
77
不错 一开始也晃了下小弟
|
|
pengfeiMay 28, 2016
78
php 是宇宙最好的语言 虽然我不会
|
|
79
php 高级黑
|
|
geeksnailJul 15, 2016
80
这都能蒙上 233333
|
|
mingyunJul 24, 2016
81
count 居然对了。。。
|