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