我试图使用php的strpos函数在另一个字符串中搜索字符串。我执行了2个不同的搜索,都包含一个冒号字符。我能看到两者之间的唯一区别是冒号是出现在"针"的开头还是结尾。
我的代码如下:<?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
。我不明白为什么,希望有人能给我解释一下。您可以在这里看到一个工作示例:
Strpos返回给定字符串(指针)在其他字符串(堆栈)中的位置。参见reference - 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
。
as per doc
strpos()
查找在干草堆字符串中第一次出现的指针的数值位置。返回指针相对于干草堆字符串开头的位置(与偏移量无关)。还要注意字符串的位置从0开始,而不是1。
strpos($string,'abc:')
返回0。所以它回显:
abc: false
在您的情况下strpos()返回true/false
结果,因此您需要根据返回结果进行检查试着
echo strpos($string,'abc:') !== false ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') !== false ? ':def true' : ':def false';
您需要使用布尔比较,它只在没有匹配时返回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