美好的一天,
我有以下字符串: [明星] ALERT [Star] Domoos检测到blabla [blabli]
由于奇怪的原因,下面的代码没有检测到第一个字符处的星号。我在php文档中读到第一个字符的索引为0.但是,如果我正在寻找' [',那么该函数效果很好。
我想要实现的是确保我的字符串的第一个字符真的是*(星号)。奇怪的是,如果我输入$ pos1 = strpos($ inputString,' *',1),则显示位置' 6'将被退回。
我不太明白为什么我的代码无法正常工作(即没有进入' true'条件)
$inputString = '*ALERT*Domoos detects blabla[blabli]';
$pos1 = strpos($inputString, '*', 0);
if ($pos1 == True)
{
echo 'position' . $pos1;
}
您有什么建议可以帮助我克服这个问题吗?
非常感谢您的支持。
答案 0 :(得分:1)
将条件更改为
if ($pos1 != False)
{
echo 'position' . $pos1;
}
因为strpos
将返回(整数)或False
答案 1 :(得分:1)
如果你看manual:
找到第一次出现针的数字位置 haystack string。
在您的测试用例中,数字位置为0
和0 != true
。
另见手册中的警告:
警告此函数可能返回布尔值FALSE,但也可能返回a 非布尔值,其值为FALSE。请阅读有关的部分 布尔值获取更多信息。使用===运算符进行测试 返回此函数的值。
所以你真正想要的条件是:
if ($pos1 !== false)
答案 2 :(得分:1)
你不需要strpos。由于字符串是一个字符数组,所以你可以这样做
$inputString = '*ALERT*Domoos detects blabla[blabli]';
$compare_char= $inputString[0];
if($compare_char=="*"){
//do something.
}
正如我想的那样快,而不是搜索strpos
答案 3 :(得分:1)
实际上问题是,当你看到0位置时,你得到的值是0,当你在if condition
中用True检查时,它总是会失败,因为 0将被评估为False 即可。要解决此问题,您可以使用
if($pos1 !== False)
答案 4 :(得分:0)
如果您搜索的内容不存在,函数strpos将返回false
。所以请按以下方式进行检查:
$inputString = '*ALERT*Domoos detects blabla[blabli]';
$pos1 = strpos($inputString, '*', 0);
return $pos1 !== false ? 'position ' . $pos1 : '..';
答案 5 :(得分:0)
$ pos1返回0,这被视为False所以我们不能把它当作True,所以我们可以使用这里的isset函数。
$inputString = '*ALERT*Domoos detects blabla[blabli]';
$pos1 = strpos($inputString, '*',0);
if (isset($pos1))
{
echo 'position' . $pos1;
}