微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – array_search返回错误的密钥

参见英文答案 > PHP in_array() / array_search() odd behaviour2个
我有这个数组:
$ar = [ 'key1'=>'John','key2'=>0,'key3'=>'Mary' ];

而且,如果我写:

$idx = array_search ('Mary',$ar);
echo $idx;

我明白了:

key2

我在网上搜索过,这不是隔离问题.似乎当关联数组包含0值时,如果未设置strict参数,则array_search将失败.

还有不止一个bug warnings,都被拒绝了动机:“array_search()认情况下进行松散比较”.

好的,我使用严格的参数来解决我的小问题……

但我的问题是:有一个体面的,有效的理由,为什么在松散比较’玛丽’== 0或'two'==0或它只是另一个PHP疯狂?

您需要将第三个参数设置为true才能使用严格比较.请看下面的解释:

array_search使用==在搜索期间比较值

FORM PHP DOC

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.

第二个元素是0,在搜索过程中字符串被转换为0

简单测试

var_dump("Mary" == 0); //true
var_dump("Mary" === 0); //false

解决方案使用严格选项来搜索相同的值

$key = array_search("Mary",$ar,true);
                                  ^---- Strict Option
var_dump($key);

产量

string(4) "key3"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐