2014-10-06 38 views
2

爲什麼下面的代碼工作:array_search找不到元素,這顯然是有

$test = array(0=>'test1','field0'=>'test2',1=>'test3','field1'=>'test4'); 
echo array_search('test4',$test); 

但以下不會:

$test = array(0=>0,'field0'=>'test2',1=>'test3','field1'=>'test4'); 
echo array_search('test4',$test); 

如果從有混合陣列發言權mysql_fetch_array ($ result,MYSQL_BOTH),並且把你需要搜索的鍵也做不到 - 它永遠不會進一步超過0.

回答

3

試着做array_search('test4',$test, TRUE);。第三個參數告訴它在比較時使用===而不是==

由於數組包含字符串和數字,因此當它與0(第一個元素)進行比較時,它會將'test4'轉換爲數字(它會停在第一個非數字字符處)並恰好匹配。

我的意思是:'test4' == 0 =>0 == 0 =>true

當您通過TRUE作爲第三個參數,它採用===,並'test4' === 0自動爲false,因爲類型不匹配,沒有轉換。

+0

我曾在手冊中看到了這一點,但未能充分認識到,它會解決這個問題,所以感謝火箭。很好的幫助。 – Ukuser32 2014-10-07 08:32:28

+0

不客氣:-) – 2014-10-08 02:25:41

0

解決方案=強制0值是一個字符串:

$test = array(0=>0,'field0'=>'test2',1=>'test3','field1'=>'test4'); 
foreach ($test as $k=>$v){ $test[$k] = (string) $v; } 
echo array_search('test4',$test);  
0

您無法搜索某個字符串的數字並期望獲得好的結果。

我的猜測是它將數值看作一個數字,所以它會將字符串轉換爲數字(它不能),以便將字符串轉換爲0.因此,0的值等於搜索字符串,也等於0,並有你的結果。

如果值爲1,則它將不匹配,因爲搜索字符串將被轉換爲0(因爲您無法將字符串轉換爲數字),因此它在下面不匹配。 $ test = array(0 => 1,'field0'=>'test2',1 =>'test3','field1'=>'test4');

你只會讓你的確切情況時,數組中的值是0

相關問題