这段代码的bug在哪里

时间:2016-08-01 04:26:55

标签: php readfile strpos

我有一个简单的代码无法正常工作,我有一个这样的文件:

David
Jordan
Steve

&安培;在一个简单的PHP代码中:

$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更改为:

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

它返回True!

2 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:0)

$ file-> fgets()函数的输出最后会包含换行符\ n。这就是strpos()函数返回false的原因。

您必须使用trim()函数清除fgets()函数中的换行符。