【问题标题】:PHP get file line by line and compare to stringPHP逐行获取文件并与字符串进行比较
【发布时间】:2020-03-20 04:49:04
【问题描述】:

我有一个文件,它基本上是该格式的名称列表:

name.lastname
name.lastname
name.lastname
myname.mylastname
name.lastname

并且我想检查我拥有的字符串是否等于其中一个名称(带点)。

这就是我已经尝试过的:


$username = "myname.mylastname"; 
$boolean = False; 
$handle = fopen("thelist.txt","r");
while (($line = fgets($handle)) !== false) {
        if ($line === $username){
            $liste = True; 
        }
    }

在该列表一直为 False 之后,我不知道为什么。

提前谢谢:)

【问题讨论】:

  • 我会检查 $line 是否作为字符串返回,因为您正在使用 === 尝试 == 并查看是否返回 true。
  • @DylanAnlezark 不幸的是,我仍然是假的。但我发现,当我回显每条 $line 时,它​​们之间会有空格,尽管我不认为应该有空格
  • 您能否在 if 语句之前打印出 $line 是什么以及 $username 是什么并与我们分享?
  • @DylanAnlezark 对于循环的第一部分,我得到“alexander.schmidt omar.remmo”,然后我得到“nina.wietbrock omar.remmoomar.remmo omar.remmoozan.dincer omar.remmo”
  • 抱歉我不太明白 "alexander.schmidt omar.remmo" = $username?其他名字 = $line

标签: php string list file compare


【解决方案1】:

我发现了一些潜在的问题。

首先是$boolean = False;$liste = True;,因此您的输出变量中可能存在拼写错误。

第二个问题是thelist.txt 不是绝对路径。所以文件资源可能加载失败。强烈建议您使用/full/path/to/file__DIR__ . '/path/to/file' 等文件资源的绝对路径。

主要问题是fgets 将在文件的每一行末尾包含\r\n,这在比较字符串变量中不存在。您可以使用trim 删除无关的行尾和空格以与字符串变量进行比较。

示例:https://3v4l.org/4VG4D

$username = "myname.mylastname"; 
$liste = false; 

$handle = fopen("thelist.txt", 'rb');
while (false !== ($line = fgets($handle))) {
    if (trim($line) === $username){
        $liste = true;
        break; //stop at first match
    }
}
fclose($handle);
var_dump($liste); //true

【讨论】:

    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 2015-04-26
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多