0

这让我陷入了一个循环:

$s = "ERROR: 5 - [RecordN...blah blah blah";
print stripos($s, 'error') . "\n";
print strpos($s, "ERROR") . "\n";
print $s . "\n";

结果是:

0
0
ERROR: 5 - [RecordN...blah blah blah

嗯?好吧,我会从这里尝试一些东西:

$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

print $pos . "\n";

结果是:

0

什么?

我在跑:

php --version

PHP 5.3.6-13ubuntu3.6 with Suhosin-Patch (cli) (built: Feb 11 2012 03:26:01) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

我在看一个错误吗?

提前致谢。

编辑:

显然在那里失去了理智。感谢所有的回复。

4

3 回答 3

4

一切都是正确的。您得到零是因为在第一次 stripos 返回 0 作为“e”(或“E”)的位置,而在第二次零只是 FALSE 被打印为整数。

如果您查看 stripos 的手册,您将看到返回值描述为

返回针相对于 haystack 字符串开头的位置(与偏移量无关)。另请注意,字符串位置从 0 开始,而不是 1。

尝试将您的代码更改为此,您将明白我的意思:

$s = "ERROR: 5 - [RecordN...blah blah blah";
var_dump(stripos($s, 'error'));
var_dump(strpos($s, "ERROR"));

var_dump(strpos($s, 'error'));
var_dump(stripos($s, "ERROR"));

print $s . "\n";

#1、#2 和 #4 将是 int(0),#3 将是 bool(false)。

在您的第二个示例中发生了完全相同的事情。您正在检查“a”的位置,它实际上是字符串中的第一个字符,这意味着它的位置是 0。

如果您需要检查字符串是否是错误,您应该从(假设)更改您的代码:

$s = "ERROR: 5 - [RecordN...blah blah blah";
$isError = stripos($s, 'error') != 0;

对此:

$s = "ERROR: 5 - [RecordN...blah blah blah";
$isError = (stripos($s, 'error') !== false);

或根据需要使其区分大小写:

$s = "ERROR: 5 - [RecordN...blah blah blah";
$isError = (strpos($s, 'ERROR') !== false);
于 2012-04-06T22:50:44.207 回答
1
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

上面的例子工作正常。因为a在 的0索引位置abc。如果它不在字符串中,则 strpos返回false.

于 2012-04-06T22:35:57.240 回答
1

如果搜索词位于字符串的第 0 位(即在开头),则返回零。明显地。

如果搜索词不在字符串中,FALSE则返回。这就是为什么你应该用它!== FALSE来测试是否找到了字符串。

于 2012-04-06T22:36:08.630 回答