2013-09-30 75 views
-1
$page_now=array_search($id, $user_id); 

if($page_now==""){return TURE;} 
else{return FALSE}//include [0]index 

我有一個array_search,如果不能找到匹配它會返回""PHP「」和0返回相同的值

但是我有[0]指數

如果搜索問題索引返回0,它是數組中的第一個。

if語句$page_now=="" & $page_now==0都是回TURE

試試這個

$var=0; 

if($var!=""){echo "have value in var";}else{echo "no value in var";} 

我希望它返回具有價值,即使它是0

+0

'如果在'$ user_id'陣列,'FALSE'中另有發現array_search'返回針的關鍵。 – hallaji

+2

也許有時間瞭解與鬆散類型語言的比較 - http://www.php.net/manual/en/types.comparisons.php和http://www.php.net/manual/en/language。 types.type-juggling.php –

+0

[array_search的手冊頁](http://www.php.net/manual/en/function.array-search.php)明確提到了這個 - 所以下次請閱讀東西像這樣問之前。 – CBroe

回答

2

這是一個記錄的行爲:

http://php.net/array_search

http://php.net/manual/en/types.comparisons.php

http://www.php.net/manual/en/language.types.type-juggling.php

警告

這個函數可以返回布爾值FALSE,但也可能返回的結果爲FALSE一個 非布爾值。請閱讀關於 布爾部分的更多信息。使用===運算符來測試此函數的返回值 。

還要確保您知道這一點:

嚴格

如果嚴格的第三個參數設置爲TRUE,則 array_search()函數將搜索在 相同的元素草垛。這意味着它也將檢查乾草堆中針的類型,並且對象必須是相同的實例。

你應該用嚴格的比較操作符===如果你不想陷入PHP弱類型的比較黑暗的深淵:

php > var_dump(0 == "0afca13435"); // oops, password's hash check went wrong :) 
bool(true) 

php > var_dump(0 == false); 
bool(true) 

BUT: 
php > var_dump(false == "0afca13435"); 
bool(false) 
// Uh, oh :) that's because int and string comparison will cast string to int, 
// and in php string->int cast will return either 0 or any numeric prefix the 
// string contain; bool and string comparison will cast string to bool, and 
// numeric prefix is no longer an issue 
---------- 

php > var_dump(false == ""); 
bool(true) 

php > var_dump(0 == ""); 
bool(true) 
// WTF! :) 

而且具有嚴格的:

php > var_dump(0 === "0afca13435"); 
bool(false) 
// ahh, much better 
+0

亞,===假終於正確返回,thx很多! – Ben

0

試試這個(空檢查,如果變量是空(「」(空字符串),0,假,空等)被計爲空(並將觸發此) 你的代碼現在不檢查是否有空,你只檢查它是不是「」和空等將被觸發爲不空。

if(empty($page_now)){ 
    return true; 
}else{ 
    return false; 
} 

如果允許爲0,你可以使用這個

if(empty($page_now) && $page_now != 0){ 
     return true; 
}else{ 
    return false; 
} 
+0

我會建議擴大爲什麼他們應該嘗試這一點。給出一個解釋的代碼,爲什麼你認爲它會爲用戶工作http://meta.stackexchange.com/questions/196187/is-try-this-bad-practice –

+0

我試過空&isset都沒有工作,我想我的代碼停止過程,如果它返回「」 – Ben

+0

現在編輯它,仍然非常新stackOverflow :) –

2

的函數array_search()如果找不到匹配則返回false。所以,你應該用嚴格的比較操作===並與false比較:

if($page_now===false) { 
    return true; 
} 
else { 
    return false; 
} 
+0

雅,===錯誤終於正確返回,thx很多! – Ben