繁体   English   中英

解析文本文件时出现意外行为

[英]Unexpected Behavior when Parsing Text File

我正在学习PHP,并且现在我陷入困境。 我正在脚本中读取.txt文件。 文件内容如下:

joe:secret
root:admin

我可以使用file()函数轻松地读取文件,该函数返回一个数组。 我将数据存储在a变量中为:

$data = file('location/file.txt');

接下来,我使用foreach循环,然后展开每一行,并将其内容再次存储在变量中。 然后,我对变量进行检查,但这是我无法理解的行为。

foreach ($data as $d) {
  $row = explode(":", $d);

  if ($row[0] == "joe" && $row[1] == "secret") {
    echo "match found ";
  }
}

上面的代码确实给出了预期的输出。 这是为什么? 如果我这样做

echo $row[0]; echo $row[1];

然后我会收到正确的输出。 所以我不明白为什么我的支票失败了?

这个棘手; 我不怪你没抓住这个:)

因此,首先,让我们研究一下php -a交互式shell:

php > $data = file('test.txt');
php > var_dump($data);
array(3) {
  [0]=>
  string(11) "joe:secret
"
  [1]=>
  string(11) "root:admin
"
  [2]=>
  string(1) "
"
}

看看结尾的报价单行如何? 这是因为每行末尾的\\n保留在$data每个数组元素内。 因此$row[1] 等于"secret" 等于"secret\\n" 为了解决这个问题,我们需要的只是rtrim()

foreach ($data as $line) {
  $line = rtrim($line);
  $row = explode(":", $line);

  if ($row[0] == "joe" && $row[1] == "secret") {
    echo "Match found for joe!";
  }
}

现在,它可以按预期工作:

php > $data = file('test.txt');
php > foreach ($data as $line) {
php {   $line = rtrim($line);
php {   $row = explode(":", $line);
php {
php {   if ($row[0] == "joe" && $row[1] == "secret") {
php {     echo "Match found for joe!";
php {   }
php { }
Match found for joe!
php >

编辑:我们也可以使用file_get_contents()而不是file() ,所以我们只将文件内容作为字符串获取,然后将其自己转换为数组:

$data = file_get_contents('test.txt');
foreach (explode("\n", $data) as $line) {
  $row = explode(":", $line);

  if ($row[0] == "joe" && $row[1] == "secret") {
    echo "Match found for joe!";
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM