Php 分析文本文件时出现意外行为

Php 分析文本文件时出现意外行为,php,text-processing,Php,Text Processing,我正在学习PHP,现在我陷入了困境。 我正在读取脚本中的.txt文件。文件内容如下所示: joe:secret root:admin 我可以使用返回数组的file()函数轻松读取文件。我将数据存储在变量中,如下所示: $data = file('location/file.txt'); 接下来我使用foreach循环,然后分解每一行,并再次将其内容存储在变量中。然后我检查变量,但这就是我不理解的行为 foreach ($data as $d) { $row = explode(":",

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

joe:secret
root:admin
我可以使用返回数组的
file()
函数轻松读取文件。我将数据存储在变量中,如下所示:

$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”
。要解决此问题,我们只需要:

现在,它按预期工作:

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()
,因此我们只需将文件内容作为字符串获取,然后自己将其转换为数组:

$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!";
  }
}

你是说他们两个都给出了正确的输出吗?@kojow7是的,我明白了为什么会这样。你可以阅读被接受的答案:)这让塞森:)谢谢你可爱的解释。代码现在可以工作了。太棒了,没问题,很高兴能帮上忙!:)
$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!";
  }
}