2017-09-25 32 views
0

我遇到了strpos評估問題。strpos沒有評估我認爲應該的

$status = "L"; 
$x = strpos($status,'L'); 
echo var_export($x,true); 
echo "<br/>"; 
if (strpos($status,'L') === true) {echo "L is there!.";} 
else {echo "No L Found!";} 

此輸出:

0 
No L Found! 

隨着我所理解strpos和 「===」 與在 「==」 這應該尋找L.

什麼我不理解?

回答

4

strpos不返回true,如果找不到字符串,則返回false,如果找到,則返回索引。

從官方文檔:

返回將針存在相對草垛字符串的開頭(獨立的偏移量)的位置。另請注意,字符串位置從0開始,而不是1.

如果未找到針,則返回FALSE。

+0

這是否意味着我需要使用!== false而不是=== true?我一直認爲如果它沒有真正設置爲布爾「假」,那麼任何與真相比較的東西都會返回true。情況並非如此嗎? – DerekConlon

+1

正確 - 雖然很短 - 答案。您可能需要添加文檔的鏈接或引用。或者甚至解釋爲什麼在這種情況下也是'true!= 1' – Jeff

+0

@DerekConlon是的,這是正確的。 – thelmuxkriovar

0

您確實需要執行嚴格的比較。你只需要做相反的事情。

if (strpos($status, 'L') !== false) { 
    echo "L is there!."; 
} else { 
    echo "No L Found!"; 
} 

=== true評估,strpos($status,'L')將不得不返回文字布爾true,而不僅僅是一個計算結果爲真值,你可以在文檔中看到,strpos永遠不會返回。

如果您使用== true來替代,那麼只有當L不是字符串中的第一個字符時,它纔會工作有時。當它是第一個字符時,strpos($status,'L')將返回0,該值不等於true,但字符串中的任何其他位置都會返回一個正整數,即可以。

由於false是如果搜索字符串沒有找到該函數返回值,唯一可靠的方式做到這一點是做嚴格比較反對false