2016-02-26 93 views
6

我有此数组:array_search回报错键

$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疯狂?

+1

我认为它停止搜索了第一个等于时。如果在'key2'('$ ar = ['key1'=>'John','key3'=>'Mary','key2'=> 0];'''''array_search''''''''' array_search''''''''''''''前面​​加上'key3' '。 – brevis

+2

正如在[array_search()](http://php.net/manual/en/function.array-search.php)手册中所述...如果搜索需要严格,您需要设置第3个参数。 .. – Naruto

+2

@Naruto是的,我写在我的问题。我的问题是关于'为什么?',而不是'如何'... – LVA

回答

8

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

array_search使用==搜索过程中

FORM PHP DOC

如果严格的第三个参数设置为TRUE,则array_search()函数将比较值在干草堆中搜索相同的元素。这意味着它也将检查干草堆中针的类型,并且对象必须是相同的实例。

Becasue所述第二元件是0搜索

简单测试

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

解使用strict选项来搜索相同的值

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

输出期间该字符串被转换为0

string(4) "key3" 
+1

优秀的解释.... – devpro

4

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

0

你只chnage在'key2'=>'0'数组中,你不给单或双引号

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

这是工作的罚款

+0

你实际上是将整数转换为字符串,这是一个错误的方法。 –

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

您实际上将整数转换为字符串,这是一种错误的方法。 –