为什么这个独立的代码不工作:
$link = 'https://google.com';
$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png');
foreach ($unacceptables as $unacceptable) {
if (strpos($link, $unacceptable) === true) {
echo 'Unacceptable Found<br />';
} else {
echo 'Acceptable!<br />';
}
}
即使$link
变量中包含https,每次打印都是可以接受的。
5条答案
按热度按时间s4chpxco1#
如有疑问,请读取the docs:
[strpos]返回needle在haystack字符串中第一次出现的数值位置。
所以你想尝试一些更像是:
因为
strpos
返回的是一个数字,而你要找的是一个布尔值。kninwzqo2#
strpos()在找到匹配项时不会返回true,而是返回第一个匹配字符串的位置。注意,如果匹配项位于字符串的开头,则返回的索引值为零,除非使用===运算符,否则该索引值将与false进行比较。
dgenwo3n3#
您的故障条件错误。
如果未找到匹配项,strpos将返回false,因此需要显式检查
wxclj1h54#
Strpos总是返回位置,就像你在字符串('https://www.example.com';)中搜索“httpsL”google.com一样,然后它返回第0个位置,PHP将其评估为false。
请看这个链接:(希望它对你很有用):http://php.net/manual/en/function.strpos.php
yb3bgrhw5#
斯特尔波斯
函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。
所以我就这样做了