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

时间:2017-02-07 20:06:23

标签: php

我试图将变量名与数组中的项匹配,并根据匹配的值设置变量颜色(即传递为绿色,失败为红色)。我不确定为什么没有正确评估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>';
      }   
    }
  }
  ?>

示例平面文件(我正在阅读),如果它失败则突出显示为红色的TestURL;如果它已通过则突出显示为绿色。

Test1 TestURL PASSED
Test2 TestURL FAILED
Test3 TestURL PASSED
Test4 TestURL PASSED

2 个答案:

答案 0 :(得分:0)

用foreach循环替换你的while循环:

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>';
}

答案 1 :(得分:0)

感谢大家的帮助。深入挖掘后我发现字符串中有一个额外的空白区域,因此模式匹配总是失败,但是当我在屏幕上打印它时我没有发现任何错误。所以在程序中没有任何问题,为了解决这个问题,我使用trim(http://php.net/manual/en/function.trim.php)函数删除了额外的空格,然后比较了实际解决了这个问题的字符串。