我试图使用php的strpos函数搜索另一个字符串中的字符串。我执行了两个不同的搜索,都包含一个冒号字符。我能看到两者之间唯一的区别是冒号是出现在“指针”的开头,还是出现在末尾。
我的代码如下:
<?php
$string = 'abc:def';
echo strpos($string,'abc:') ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') ? ':def true' : ':def false';
我得到的输出是abc: false / :def true
。我不明白为什么,我希望有人能解释给我听。您可以在这里看到一个有用的示例:
发布于 2014-05-20 01:21:03
Strpos返回给定字符串(指针)在其他字符串(堆栈)中的位置。参见参考资料- 斯特波斯。正确使用strpos (注意它是!==
而不是!=
,因为我们也想检查类型):
$string = 'abc:def';
echo strpos($string,'abc:') !== false ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') !== false ? ':def true' : ':def false';
总之,当找不到值时,strpos返回一个位置(例如0或5)或false
的数值。
为什么你的片段
echo strpos($string,':def') ? ':def true' : ':def false';
返回true -在PHP中,如果将每个非零整数作为布尔值进行比较,则每个非零整数都被视为true
,并且您的strpos返回的值大于零(在本例中可能是'4‘),因此它被认为是true
。有关更多详细信息,请参阅这里。
发布于 2014-05-20 01:25:38
在您的示例中,strpos()返回true/false
结果,因此需要根据返回结果进行检查
echo strpos($string,'abc:') !== false ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') !== false ? ':def true' : ':def false';
发布于 2014-05-20 01:26:02
您需要使用布尔比较,只有在没有匹配时,它才返回false。
$string = 'abc:def';
echo strpos($string,'abc:') !== false ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') !== false ? ':def true' : ':def false';
strpos($string, "abc") will return (int) 0
(int) 0 !== false ---> true statement
(int) 0 === true ---> false statement
https://stackoverflow.com/questions/23755719
复制