这让我抛出一个循环:
$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
咦?好吧,我会尝试here:
$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
我在看一个错误吗?
提前致谢。
编辑:
那里显然已经失去了理智。感谢所有的回复。
答案 0 :(得分:4)
一切都是正确的。你得到零,因为在第一次stripos返回0作为“e”(或“E”)的位置,而在第二种情况下,零只是FALSE被打印为整数。
如果您查看stripos的手册,您会看到返回值描述为
返回针相对于针的位置 开始使用haystack字符串(与offset无关)。另请注意 字符串位置从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);
答案 1 :(得分:1)
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
上面的例子运行正常。由于a
位于0
的{{1}}索引位置。如果它不在字符串中,则abc
将返回strpos
。
答案 2 :(得分:1)
如果搜索词位于字符串的位置0(即开头),则返回零。明显。
如果搜索字词不在字符串中,则返回FALSE
。这就是为什么你应该使用!== FALSE
来测试是否找到了字符串。