在while循环-php中匹配值并设置变量

在while循环-php中匹配值并设置变量,php,Php,我正在尝试将变量名与数组中的项匹配,并根据匹配的值设置变量颜色(即,passed为绿色,failed为红色)。我不知道为什么if条件没有正确评估 <style type="text/css"> table { font-family: arial, sans-serif; border: 1px solid black; font-size: 12px; white-space:pre-wrap; word-wrap:break-word;

我正在尝试将变量名与数组中的项匹配,并根据匹配的值设置变量颜色(即,passed为绿色,failed为红色)。我不知道为什么if条件没有正确评估

<style type="text/css">
table {
    font-family: arial, sans-serif;
    border: 1px solid black;
    font-size: 12px;
    white-space:pre-wrap; 
    word-wrap:break-word;
    text-decoration:none;

}

td, th {
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;
    white-space:pre-wrap; 
    word-wrap:break-word;

 }

 .red {
     color: #FF0000; 
 }

.green {
    color: #008000;
}

</style>
<?php

header("My Dashboard");
$homdir = "/var/www/html/myfolder/";
$di     = new RecursiveDirectoryIterator($homdir);
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
if (pathinfo($filename, PATHINFO_EXTENSION) == "html") {
    $lines = file($filename);
    echo nl2br($lines[1]);
}
if (pathinfo($filename, PATHINFO_FILENAME) == "Results") {
    echo '
    <br />&nbsp;</p> 
    <table summary="My Table">
    <tr>
    <th>Test</th>
    <th>Results</th>
    </tr> <br />&nbsp;</p>';
    $fp = fopen($filename, 'r');
    if (!$fp) {
        echo 'ERROR: Unable to open file.</table></body></html>';
        exit;
    }

    $row = 0;

    while (!feof($fp)) {
        $row++;
        $line        = fgets($fp, 1024); //use 2048 if very long lines
        $field[$row] = explode(' ', $line);
    }

    fclose($fp);

    $arrays = count($field) - 1;

    $loop = 0;

    $passvalue="PASSED";
    $failvalue="FAILED";

    while ($loop < $arrays) {
        if ($field[$loop][2] == $passvalue) {
           $color="red";
        } elseif ($field[$loop][2] == $failvalue) {
           $color="green";
        }
        $loop++;
        echo '
            <tr>
               <td><a href="' . $field[$loop][1] . '" class='.$color'>'  .   $field[$loop][0] . '</a></td>
               <td>' . $field[$loop][2] . '</td>
           </tr>';
      }   
    }
  }
  ?>

将while循环替换为foreach循环:

while (!feof($fp)) {
    $row++;
    $line        = fgets($fp, 1024); //use 2048 if very long lines
    $fields[$row] = explode(' ', $line);
}
fclose($fp);
foreach( $fields as $item )[
  if( $item[2] == 'PASSED' ){
     $color  = 'color: #008000;';
  } elseif ( $item[2] == 'FAILED' ){
     $color = 'color: #FF0000;';
  }
  echo '
        <tr>
           <td><a href="' . $item[1] . '" style="'.$color'">' . $item[0] . '</a></td>
           <td>' . $item[2] . '</td>
       </tr>';
}
while(!feof($fp)){
$row++;
$line=fgets($fp,1024);//如果行很长,则使用2048
$fields[$row]=分解(“”,$line);
}
fclose($fp);
foreach($字段作为$项)[
如果($item[2]==‘已通过’){
$color='color:#008000;';
}elseif($item[2]=='FAILED'){
$color='color:#FF0000;';
}
回声'
“.$item[2]”
';
}

感谢大家的帮助。深入挖掘后,我发现字符串中添加了额外的空白,因此模式匹配总是失败,尽管当我在屏幕上打印时,我没有注意到任何错误。因此程序中没有任何错误,为了解决此问题,我删除了e使用trim()的xtra空白函数,然后比较实际解决此问题的字符串。

看起来您的while循环没有正确关闭。它缺少关闭
}
@Lokesh Stackoverflow需要重现此问题所需的最小示例。请不要为了我们的缘故而截断您的代码,只需给我们足够的有效代码即可我们自己发现并重现您的问题。无效代码对任何人都没有多大用处。
foreach()
循环将使这变得更简单,错误率更低。我们如何知道
$fp
没有失败?如果有什么会被抛出?以及以后如何使用
$color
。@Lokesh您能添加var_dump($field[$loop][2]);在循环的开始处,并在此处发布输出?在这种情况下,如何将输出写入表?@Lokesh我已将输出添加到答案中
while (!feof($fp)) {
    $row++;
    $line        = fgets($fp, 1024); //use 2048 if very long lines
    $fields[$row] = explode(' ', $line);
}
fclose($fp);
foreach( $fields as $item )[
  if( $item[2] == 'PASSED' ){
     $color  = 'color: #008000;';
  } elseif ( $item[2] == 'FAILED' ){
     $color = 'color: #FF0000;';
  }
  echo '
        <tr>
           <td><a href="' . $item[1] . '" style="'.$color'">' . $item[0] . '</a></td>
           <td>' . $item[2] . '</td>
       </tr>';
}