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

问题描述 投票:0回答:3

我正在使用

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
!当
true
返回
strpos()
时,如何声明
0

php strpos
3个回答
18
投票

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

警告

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

您必须使用

===
运算符而不是
==

在您的情况下,不要使用

<>
,而是使用
!==

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

如果在

$ss1
 中找到 
$grafik['data']

,则返回 TRUE

5
投票

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


4
投票

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

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

或使用变量进行测试

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

© www.soinside.com 2019 - 2024. All rights reserved.