免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2813 | 回复: 11
打印 上一主题 下一主题

【紧急】array_search的BUG么???!! [复制链接]

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-03 14:24 |只看该作者 |倒序浏览
  1. $callings =        Array
  2.                                 (
  3.                                     'uid' => '1372830817.235',
  4.                                     'duid' => '1372830817.236',
  5.                                     'channel' => 'SIP/8002-000000eb',
  6.                                     'destination' =>'SIP/68782389-000000ec',
  7.                                     'from_number' => 8002,
  8.                                     'to_number' => '051010086',
  9.                                     'switchboard' => 0,
  10.                                     'timer' => 1372830820,
  11.                                     'is_out' => 1,
  12.                                     'flag' => 1
  13.                                         );
  14.          
  15.           echo array_search('SIP/8006-000000ed',$callings);
复制代码
结果竟然是switchboard?!
改成
  1. echo array_search('SIP/8006-000000ed',$callings,TRUE);
复制代码
才成功
难道array_search默认情况下不能搜索字符串?!!

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
2 [报告]
发表于 2013-07-03 14:37 |只看该作者
很诡异的问题,如果第九行的值改成不为0,就能正常了
只要值为0,就返回值为0对应的那个key,这个是BUG么??!!!

论坛徽章:
0
3 [报告]
发表于 2013-07-03 18:17 |只看该作者
这算什么bug, php对字符串和数字进行比较时都会把字符串转换成数字类型的, 而"SIP/8006-000000ed"很明显会被转换成0, 所以就出现你的情况.

论坛徽章:
0
4 [报告]
发表于 2013-07-04 11:11 |只看该作者
If the third parameter strict is set to TRUE then the array_search() function will search for identical elements in the haystack. This means it will also check the types of the needle in the haystack, and objects must be the same instance.

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
5 [报告]
发表于 2013-07-04 14:13 |只看该作者
回复 3# liexusong

我就不明白了,这串字符怎么样也不能被转换成0吧。。。
   

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
6 [报告]
发表于 2013-07-04 14:14 |只看该作者
回复 4# maochanglu

这个字符串和0简直就是八竿子打不着的
再怎么低级也不会认为是0吧。。
   

论坛徽章:
0
7 [报告]
发表于 2013-07-05 09:36 |只看该作者
回复 6# 除美灭日平韩


    If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
8 [报告]
发表于 2013-07-05 15:28 |只看该作者
回复 7# maochanglu
只对以数字开头的字符串有效?
那这个函数有什么意义呢?


   

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
9 [报告]
发表于 2013-07-05 15:38 |只看该作者
根据测测试,只要在搜到有个value值为0之前没有搜索到要查找的字符串,就会把这个0对应的key返回出来,不管后面有没有这个要搜索的字符串的值
比如
  1. $arr = array('aaa'=>'0d','bbbb'=>0,'ddd'=>'dd');
  2.                 echo array_search('dd', $arr);
复制代码
还是输出bbbb
这不是BUG是什么?
如果非要加个true才能搜索出来
那为什么还要这第三个参数干嘛呢
直接默认就按照第三个参数是TRUE的情况搜索不就完了
想不明白

论坛徽章:
0
10 [报告]
发表于 2013-07-08 10:51 |只看该作者
也不算bug吧,手册都有解释

如果不加 第三个参数,默认是  FALSE,会把传入的值 intval 一下

你看看   echo intval('SIP/8006-000000ed');    结果是  0

如果可选的第三个参数 strict 为 TRUE,则 array_search() 还将在 haystack 中检查 needle 的类型。

所以 没有写明 为 true 的时候,是不检测类型的,都会 intval 的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP