松散地检查 strpos() 的返回值会产生意想不到的结果

发布于 2024-10-02 20:29:17 字数 642 浏览 6 评论 0原文

我使用 strpos() 来查找一个字符串在另一个字符串中的位置。我首先检查是否在那里找到了该字符串。这是我的台词:

if (
    strpos($grafik['data'], $ss1) <> false
    && strpos($grafik['data'], $ss2) <> false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)

我检查是否包含两个字符串,然后我希望将第一个字符串放在第二个字符串之前。在 PHP 手册中,它说当找不到字符串时,strpos() 返回 false。但是,如果我的字符串从零位置开始(strpos() 从一开始就返回 0),则此语句似乎

strpos($grafik['data'], $ss1) <> false

是错误的。不知怎的,0等于false!当 strpos() 返回 0 时,如何生成语句 true

I'm using strpos() to find the position of a string in another string. I first check if the string is found at all in there. Here's my line:

if (
    strpos($grafik['data'], $ss1) <> false
    && strpos($grafik['data'], $ss2) <> false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)

I check if both strings are contained and then I want the first one to be placed before the second one. In the PHP manual it says that strpos() returns false when string is not found. However if my string starts at the zero position (strpos() returns 0 since its the beginning), it seems like this statement

strpos($grafik['data'], $ss1) <> false

is false. Somehow 0 is equal to false! How do I make the statement true when strpos() returns 0?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

影子的影子 2024-10-09 20:29:17

来自 http://www.php.net/manual/en/function.strpos。 php:

警告

该函数可能返回布尔值
FALSE,但也可能返回
非布尔值,其计算结果为
FALSE,例如 0 或“”。请阅读
有关更多信息,请参阅 布尔值 部分
信息。使用 === 运算符
测试这个的返回值
功能。

您必须使用 === 运算符而不是 ==

在您的情况下,不要使用 <>,而是使用 !==

strpos($grafik['data'], $ss1) !== false

如果在 $ss1 中找到,这将返回 TRUE >$grafik['数据']

From http://www.php.net/manual/en/function.strpos.php:

Warning

This function may return Boolean
FALSE, but may also return a
non-Boolean value which evaluates to
FALSE, such as 0 or "". Please read
the section on Booleans for more
information. Use the === operator for
testing the return value of this
function.

You have to use the === operator instead of ==.

In your case, instead of using <>, use !==:

strpos($grafik['data'], $ss1) !== false

This will return TRUE if $ss1 is found in $grafik['data']

过度放纵 2024-10-09 20:29:17

您需要检查===。这将确保你得到的是精确的 false 而不是 0。

You need to check with ===. This will make sure you have exact false and not 0.

醉态萌生 2024-10-09 20:29:17

该函数的行为不可预测,因此为了确保它具有确定性行为,请使用

if(strpos($text,$string)===false)

或者使用变量

$pos=strpos($text,$string); 测试它。
if($pos===假)

This function behaves unpredictably, so to be sure it'll have deterministic behavior use either

if(strpos($text,$string)===false)

or test it using a variable

$pos=strpos($text,$string);
if($pos===false)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文