在while循环-php中匹配值并设置变量
我正在尝试将变量名与数组中的项匹配,并根据匹配的值设置变量颜色(即,passed为绿色,failed为红色)。我不知道为什么if条件没有正确评估在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;
<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 /> </p>
<table summary="My Table">
<tr>
<th>Test</th>
<th>Results</th>
</tr> <br /> </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>';
}