2017-07-10 84 views
0

好日子,讓我的字符串中的字符的位置,無法使用strpos

我有以下字符串: [明星] ALERT [明星] Domoos檢測布拉布拉[blabli]

對於陌生的原因,下面的代碼在第一個字符處沒有檢測到星星。我在php文檔中讀到第一個字符的索引爲0.但是,如果我正在尋找'[',該函數工作得很好。

我想要實現的是確保我的字符串的第一個字符真的是*(星號)。奇怪的是,如果我輸入$ pos1 = strpos($ inputString,'*',1),位置'6'處顯示的星號將被返回。

我不明白爲什麼預期(即不進入「真」的條件)

$inputString = '*ALERT*Domoos detects blabla[blabli]'; 
$pos1 = strpos($inputString, '*', 0); 

if ($pos1 == True) 
{ 
echo 'position' . $pos1; 
} 

你有什麼建議,幫助我克服這個問題,我的代碼不能正常工作?

非常感謝您的讚賞支持。

+0

你也可以使用'substr($ inputString,0,1);'來提取第一個字符,然後測試它而不是找到字符串。 –

回答

1

變化條件

if ($pos1 != False) 
{ 
    echo 'position' . $pos1; 
} 

strpos將在(整數)或False

1

返回位置。如果你看一下manual

查找第一次出現的數字位置在乾草堆串 針。

在您的測試情況下,數字的位置是00 != true

另請參見手冊中的警告:

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

所以,你真正想要的條件是:

if ($pos1 !== false) 
0

功能strpos返回false如果沒有你搜索什麼的存在。因此請進行如下檢查:

$inputString = '*ALERT*Domoos detects blabla[blabli]'; 
$pos1 = strpos($inputString, '*', 0); 

return $pos1 !== false ? 'position ' . $pos1 : '..'; 
1

您不需要strpos。作爲字符串是字符數組,所以你可以像這樣

$inputString = '*ALERT*Domoos detects blabla[blabli]'; 
$compare_char= $inputString[0]; 
if($compare_char=="*"){ 
    //do something. 
} 

正如我想這是快呢,而不是通過strpos搜索

1

其實問題是,當你正在尋找在0位置的值你得到的是0,當你在if condition中檢查True時,它總是會失敗,因爲0將被評估爲False。要解決這一點,你可以使用

if($pos1 !== False) 
0

$ POS1返回0,這是當作假,所以我們不能把它當作真正的,所以我們可以在這裏使用isset功能。

$inputString = '*ALERT*Domoos detects blabla[blabli]'; 
$pos1 = strpos($inputString, '*',0); 

if (isset($pos1)) 
{ 
    echo 'position' . $pos1; 
}