array_search返回错误的密钥

时间:2016-02-26 10:59:21

标签: php arrays

我有这个数组:

$ar = [ 'key1'=>'John', 'key2'=>0, 'key3'=>'Mary' ];

,如果我写:

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

我明白了:

key2

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

还有不止一个bug warnings,所有被拒绝的动机:“array_search()默认情况下进行宽松的比较”。

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

但我的问题是:在松散比较'Mary'==0'two'==0或者只是另一个PHP疯狂时,有一个体面的,有效的理由?

4 个答案:

答案 0 :(得分:10)

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

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

FORM PHP DOC

  

如果第三个参数strict设置为TRUE,那么array_search()函数将在haystack中搜索相同的元素。这意味着它还将检查大海捞针中的针的类型,并且对象必须是同一个实例。

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

简单测试

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

解决方案使用strict选项搜索相同的值

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

<强>输出

string(4) "key3"

答案 1 :(得分:4)

数组中有一个0(零)数值,默认情况下array_search()执行非严格比较(==)。 0 == 'Mary'为真,您应将第3个参数传递给array_search()(true)。

答案 2 :(得分:-1)

您只需在'key2'=>'0'中的数组中输入单词或双引号

$ar = [ 'key1'=>'John', 'key2'=>'0', 'key3'=>'Mary' ];

这很好用

答案 3 :(得分:-1)

  $ar = [ 'key1'=>'John', 'key2'=>'0', 'key3'=>'Mary' ];