php – array_search返回错误的密钥

前端之家收集整理的这篇文章主要介绍了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"

猜你在找的PHP相关文章