在尝试确定字符串是否包含不需要的元素时,程序员在使用 strpos() 直接进行操作时可能会遇到意外结果相等比较。
考虑这个场景:
$link = 'https://google.com'; $unacceptables = ['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 />'; } }
有趣的是,这段代码打印“可接受!”对于 $unacceptables 中的每个元素,尽管 $link 中存在 https。这种看似矛盾的行为源于 strpos() 本身的性质。
深入研究 PHP 官方文档可以阐明该函数的真正目的:
返回在指针中第一次出现的数字位置haystack 字符串。
因此,当将 strpos() 的结果直接与 true 进行比较时,您可以有效地检查是否存在$link 中不需要的元素,而不是它与 true 相等。
要纠正这个问题,更合适的方法是在 if 语句中使用 !== false:
// ... if (strpos($link, $unacceptable) !== false) {
通过这样做因此,您可以正确评估 strpos() 是否检测到不良元素的存在,从而产生所需的结果。
以上是为什么比较 `strpos()` 和 `true` 无法检测 PHP 中的字符串出现?的详细内容。更多信息请关注PHP中文网其他相关文章!