2016-02-26 32 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

您實際上將整數轉換爲字符串,這是一種錯誤的方法。 –