php问题strpos($goods_attr,'VIP套餐') !== false)不同环境下结果不同.

2013-12-28 18:07:10 +08:00
 barb
$rrrr=array();
if(strpos($rrrr,'VIP套餐') !== false){
echo 'aaa';
}else{
echo 'bbb';
}
同一套代码,一个出来aaa,一个出来bbb
搞了一下午没发现原因
6275 次点击
所在节点    程序员
13 条回复
lizheming
2013-12-28 18:13:53 +08:00
strpos接受的第一个参数不是string么..能用array?以及不等于不是 != 么?
txlty
2013-12-28 18:17:14 +08:00
!==是“不全等”没错。
参数确实有问题。根据你的代码推测,应该用 in_array('VIP套餐',$rrrr) 吧?
lizheming
2013-12-28 18:21:38 +08:00
@txtly 嗯,学习到了..还有不全等一说啊0_0...
master
2013-12-28 18:23:31 +08:00
确实得要 !== 的,这个地方没错。

第一个参数确实不应该是array,而且文档中的Notes也有用户指出第一个参数传array的时候会出现意料之外的结果
http://www.php.net/manual/en/function.strpos.php

最后同楼上,如果需要在数组中进行查找的的话,用的不是strpos而是in_array
http://www.php.net/in_array
Sunyanzi
2013-12-28 18:46:22 +08:00
@lizheming 二爷你这是在卖萌么 ... 怎么可能会不知道全等和不全等啦 ...

关于 LZ 的问题 ... 代码本身存在的错误楼上说了不少我就不赘述了 ...

我单纯说一下为什么这段不正确的代码会产生两种不同的结果 ...

这里要以 php 5.3 为分界线 ... 在 php 5.3 之前的任何一个版本 ...

如果你给一个字符串参数传递数组的话会触发一个 Notice 级的 Array to string conversion ...

然后是正常的空字符串查找 ... 返回 false ... 你的代码输出 bbb ...

5.3 之后这种不严谨的行为被修正了 ... 同样的代码会触发一个 type mismatch 的 warning ...

具体描述大概类似这样 ... strpos() expects parameter 1 to be string, array given in file ...

这时函数无法正常执行 ... 返回值是 null ... 你的代码输出 aaa ...

所以我们得到结论 ... 造成这个问题的根本原因是你的两个环境 php 版本不同 ...

输出 bbb 的 php 版本一定低于输出 aaa 的 php 版本 ...

另外提供一个建议 ... 在开发的时候保持 error_reporting 开启 ...

这样的话造成这个区别的原因一眼就能看出来 ... 根本不用浪费一个下午 ...
lizheming
2014-01-03 20:49:52 +08:00
@Sunyanzi -_-!惊现孙大大的回复,好神奇..话说我是真的不知道不全等这个概念的,因为之前都没用过..不过现在直到了QwQ..我真的不是恶意卖萌啊....
以及v2ex的提醒真是好bug,明明6天之前的回复结果今天因为另外一条回复提醒才被激发,让我错过了即时和孙大大聊天的几乎该当何罪!!!
最后,孙大大不去sf玩了么QAQ,感觉大大好久没去了啊。
Sunyanzi
2014-01-05 13:25:20 +08:00
@lizheming 好吧 ... 那就当做不经意间学到了新知识好啦 ...

SF 还是有去看啦 ... 但近来都没发现想要回答的问题的说 ...

以及最近的回答质量都不错 ... 偷偷的看着大家百花齐放也是很有趣的事情 ...

另外 ... 从我的直觉上讲 P 酱似乎是个萌萌的姑娘 ... 要好好跟她发展呀!
lizheming
2014-01-05 18:55:31 +08:00
@Sunyanzi =。=!吓尿...sf上每一个剧情发展都被大大观察到了..好腻害T_T... 话说做到这种程度已经不只是“有去看”这么简单了吧=。=
以及大大你的直觉杯具了,P酱意外的是个男的,而且还结婚了...最重要的是刚有娃娃了...发展个毛线啊...摔!!T_T... 不过我还是勾搭成功了 =w=
Sunyanzi
2014-01-05 19:14:07 +08:00
@lizheming 什!!么!!!!我!!便!!是!!不!!相!!信!!了!!口!!牙!!

说是可爱的男孩纸我也就信了 ... 这么萌断然不可能是一个有娃娃的大叔啊啊啊啊啊啊啊啊啊啊啊!!

妈蛋 ... 我的世界观要崩坏了么 ... 怎么可能会有男人比我还萌的!!

不 ... 不是这样的 ... 在三次元亲眼见到 P 酱本人之前不要相信这些奇怪的事情!!
lizheming
2014-01-05 19:36:11 +08:00
@Sunyanzi 大叔也有春天好么,大大不要这么歧视大叔哇o(╯□╰)o.. P酱是萌物啦但是断然超越不了大大啊..您是属于傲娇萌啊,顶级萌属性啊有么有!!!!!
三次元..唔..我只有P酱萌崽照片一枚..他本人的只能靠大大你自己去发觉了..加油!大大!!啊..忘了说了,求到时候发一份给我QwQ...
perichr
2014-01-05 23:45:00 +08:00
咳咳,求助(严肃地):请问这种时候我该如何吐槽?
Sunyanzi
2014-01-07 18:31:33 +08:00
@perichr P 酱!!!(抱大腿
perichr
2014-01-10 00:43:05 +08:00
@Sunyanzi 孙大大你好,向你学习口牙~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/94870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX