2017-07-10 42 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; 
}