我正在尝试使用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
。我不明白为什么,并希望有人可以向我解释。你可以在这里看到一个有效的例子:
答案 0 :(得分:2)
Strpos返回给定字符串(needle)在其他字符串(堆栈)中的位置。参见参考 - 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返回值大于零(可能&#39; 4&#39;在此例如),因此它被认为是true
。有关详细信息,请参阅here。
答案 1 :(得分:1)
根据 doc
strpos()
在haystack字符串中查找第一次出现针的数字位置。 返回针存在于相对于haystack字符串开头的位置(与offset无关)。另请注意,字符串位置从0开始,而不是1.
所以
strpos($string,'abc:')
返回0.所以它回应:
abc: false
答案 2 :(得分:1)
在您的情况下strpos()返回true/false
结果,因此您需要根据返回结果进行检查
尝试
echo strpos($string,'abc:') !== false ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') !== false ? ':def true' : ':def false';
答案 3 :(得分:1)
您需要使用布尔比较,并且仅在没有匹配时返回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