2012-04-06 20 views
0

這我拋出一個循環:在什麼是strpos和or stripos的正確使用方法? (這是一個錯誤嗎?)

$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 

我是不是在看一個錯誤?

在此先感謝。

編輯:

顯然在那裏失去了我的感官。感謝所有的答覆。

回答

4

一切都正確。因爲第一次stripos會返回0作爲「e」(或「E」)的位置,而第二次將0簡單地作爲整數打印爲FALSE,您將得到零。

如果您檢查stripos函數手冊,你會看到,返回值說明

返回將針存在相對 beginnning草垛字符串(獨立的偏移量)的位置。還要注意 該字符串位置從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
$mystring = 'abc'; 
$findme = 'a'; 
$pos = strpos($mystring, $findme); 

上述示例正常工作。由於a位於abc0指數位置。如果它不在字符串中,則strpos將返回false

1

如果搜索項位於字符串的位置0(即在開始處),則返回零。明顯。

如果搜索項不在字符串中,則返回FALSE。這就是爲什麼您應該使用!== FALSE來測試字符串是否已被找到。

相關問題