这让我陷入了循环:
$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
我在看错误吗?
提前谢谢。
编辑:
显然在那里失去了理智。 感谢您的所有回复。
一切都是正确的。你得到零是因为第一次 stripos 返回 0 作为"e"(或"E")的位置,而在第二次情况下,零只是 FALSE 打印为整数。
如果您检查 stripos 的手册,您将看到返回值描述为
返回指针相对于 干草堆字符串的开始(与偏移量无关)。另请注意 该字符串位置从 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);
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
上面的示例工作正常。由于a
处于abc
的0
指数位置。如果它不在字符串中,那么strpos
将返回false
。
如果搜索词位于字符串的位置 0(即开头),则返回零。明显地。
如果搜索词不在字符串中,则返回FALSE
。这就是为什么你应该使用 !== FALSE
来测试是否已找到字符串。