2016-08-01 52 views
0

我有一個簡單的代碼,不能正常工作,我有一個這樣的文件:在一個簡單的PHP代碼凡這段代碼的錯誤

David 
Jordan 
Steve 

&:

$file = new SplFileObject("file.txt"); 

while (!$file->eof()) { 

    $array[]=$file->fgets(); 
} 
$string = 'Hi , I\'M David'; 

if(strposa($string, $array)){ 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

function strposa($haystack, $needle, $offset=0) { 
if(!is_array($needle)) $needle = array($needle); 
foreach($needle as $query) { 
    if(strpos($haystack, $query, $offset) !== false) return true; // stop on first true result 
} 
return false; 
} 

但此代碼不能正常工作,如果

$string = 'Hi , I\'M David'; 

它返回false,但是當$字符串變化:

$string = 'Hi , I\'M Steve'; 

它返回True!

回答

1

最後,我找到了三種方法來解決這個問題。
方式1 =>使用RTRIM函數:

$array[]=rtrim($file->fgets()); 

方式2 =>使用str_replace函數功能:

$array=str_replace("\r\n","",$array); 

$array[]=str_replace("\r\n","",$file->fgets()); 

方式3 =>使用文件功能:

$array = file("file.txt", FILE_IGNORE_NEW_LINES); 
0

$ file-> fgets()函數的輸出將在最後包含換行符\ n。這就是strpos()函數返回false的原因。

您必須使用trim()函數從fgets()函數中清除換行符。