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"

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...