对 strpos() 返回值的松散解释会导致意外结果
在寻找字符串中的特定子字符串时,存在一个使用 PHP 的 strpos() 函数时可能会导致意外结果的陷阱。让我们揭开为什么松散检查 strpos() 返回值会导致混乱的谜团。
考虑下面的代码片段:
if ( strpos($grafik['data'], $ss1) != false && strpos($grafik['data'], $ss2) != false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
在此代码中,strpos() 用于确定$grafik['data'] 字符串中子字符串 $ss1 和 $ss2 的位置。目的是检查两个子字符串是否存在,并确保 $ss1 排在 $ss2 之前。
根据 PHP 手册,如果未找到子字符串,strpos() 返回 false。然而,我们发现,当子字符串从零位置(即字符串的开头)开始时,strpos() 返回 0。这会导致意外的解释,其中表达式:
strpos($grafik['data'], $ss1) != false
计算结果为false,尽管 $ss1 从零位置出现。罪魁祸首是弱等价运算符 !=,它认为 0 等同于 false。
要纠正此问题,应使用严格等价运算符 ===:
if ( strpos($grafik['data'], $ss1) !== false && strpos($grafik['data'], $ss2) !== false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
=== 运算符执行严格比较,确保 0 不被视为等同于 false。通过此更正,代码将正确确定 $ss1 和 $ss2 的存在及其相对位置。
以上是为什么 PHP 中与 strpos() 的松散比较会导致意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!