为什么每个'< ~~~>'是不是用颜色名称取代?为什么只有最后一个有效?

时间:2017-03-24 09:12:25

标签: php

<?php
$color='red';
 $lines=file("new.txt");
 foreach ($lines as $line) {
      if($line=='<~~~>'){
                  if($color=='red')
                     echo $color='yellow';
                  elseif($color=='yellow')
                     echo $color='red';
                    }
  else{
  echo $line."<br>";
    }
 }
?>

文件内容:

  嘿,你好吗

     

&LT; ~~~&GT;

     

我很好你呢?

     

&LT; ~~~&GT;

     

我也很好。谢谢。

     

&LT; ~~~&GT;

输出即将来临:

  嘿,你好吗

     

&LT; ~~~&GT;

     

我很好你呢?

     

&LT; ~~~&GT;

     

我也很好。谢谢。

     

3 个答案:

答案 0 :(得分:4)

每行末尾都有一个尾随的换行符。使用trim($line)摆脱它:

<?php
$color = 'red';
$lines = file("new.txt");
foreach ($lines as $line) {
    if (trim($line) == '<~~~>') {
        if ($color == 'red')
            echo $color = 'yellow';
        else if ($color == 'yellow')
            echo $color = 'red';
        echo "<br />"; // Added to keep the original format
    } else {
        echo $line . "<br />";
    }
}

输出:

  嘿,你好吗

     

     

我很好你呢?

     

红色

     

我也很好。谢谢。

     

答案 1 :(得分:3)

documentation of PHP file() function

中对此进行了解释
  

返回值

     

返回数组中的文件。数组的每个元素对应于文件中的一行,换行符仍然附加。

这意味着,除最后一行外,如果它不以新行字符结尾,则文件中的任何行都不能等于字符串'<~~~>'

解决方案也在同一documentation page中提供,下面有一段:

  

注意:

     

结果数组中的每一行都包含行结尾,除非使用FILE_IGNORE_NEW_LINES,因此如果您不希望行结束,则仍需要使用rtrim()

答案 2 :(得分:-3)

你的问题是

echo $color='yellow';

只是做

echo 'yellow'

代替。 echo'red'

也是如此

表达式“$ color ='yellow'”产生一个'void'的返回值,然后由“echo”看到。所以实际上你正在做一个“回声无效”;等效。