【问题标题】:Array to string conversion with conditional formatting带条件格式的数组到字符串转换
【发布时间】:2025-12-14 12:00:02
【问题描述】:

我正在尝试获取 MySQL 输出并将 CSS 条件格式应用于查询输出的 PHP 表。我在当前版本的代码中收到“数组到字符串的转换”——这至少会产生一些错误。这是我目前所拥有的。

<table>
<thead>
<tr>
<th>Date</th>
<th>High</th>
<th>Low</th>
<th>Average</th>
<th>DFNorm</th>
<th>HDD</th>
<th>CDD</th>
<th>Liquid</th>
<th>Snow</th>
<th>SDepth</th>
<th>WAvg</th>
<th>WMax</th>
<th>Clouds</th>
<th>Weather</th>
</tr>
</thead>
<tbody>

<?php

$result = mysqli_query($con,"
select
Date,
High,
Low,
Average,
DFNorm,
HDD,
CDD,
Liquid,
Snow,
SDepth,
WAvg,
WMax,
Clouds,
Weather
from CF6MCI order by Date DESC;");

while($row = mysqli_fetch_array($result))
{

$High = array();
$High[] = $row['High'];

/* NOT WORKING BELOW THIS LINE !!

$cHigh = array();
$cHigh = '';
switch ($High)
    {
    case ($High <= -25): $cHigh = 'C6TB25'; break;
    case ($High <= -20) and ($High >= -24): $cHigh = 'C6TB20B24'; break;
    case ($High <= -15) and ($High >= -19): $cHigh = 'C6TB15B19'; break;
    case ($High <= -10) and ($High >= -14): $cHigh = 'C6TB10B14'; break;
    case ($High <= -5) and ($High >= -9): $cHigh = 'C6TB05B09'; break;
    case ($High <= 0) and ($High >= -4): $cHigh = 'C6T000B04'; break;
    case ($High <= 4) and ($High >= 1): $cHigh = 'C6T004001'; break;
    case ($High <= 9) and ($High >= 5): $cHigh = 'C6T009005'; break;
    case ($High <= 14) and ($High >= 10): $cHigh = 'C6T014010'; break;
    case ($High <= 19) and ($High >= 15): $cHigh = 'C6T019015'; break;
    case ($High <= 24) and ($High >= 20): $cHigh = 'C6T024020'; break;
    case ($High <= 29) and ($High >= 25): $cHigh = 'C6T029025'; break;
    case ($High <= 32) and ($High >= 30): $cHigh = 'C6T032030'; break;
    case ($High <= 34) and ($High >= 33): $cHigh = 'C6T034033'; break;
    case ($High <= 39) and ($High >= 35): $cHigh = 'C6T039035'; break;
    case ($High <= 44) and ($High >= 40): $cHigh = 'C6T044040'; break;
    case ($High <= 49) and ($High >= 45): $cHigh = 'C6T049045'; break;
    case ($High <= 54) and ($High >= 50): $cHigh = 'C6T054050'; break;
    case ($High <= 59) and ($High >= 55): $cHigh = 'C6T059055'; break;
    case ($High <= 64) and ($High >= 60): $cHigh = 'C6T064060'; break;
    case ($High <= 69) and ($High >= 65): $cHigh = 'C6T069065'; break;
    case ($High <= 74) and ($High >= 70): $cHigh = 'C6T074070'; break;
    case ($High <= 79) and ($High >= 75): $cHigh = 'C6T079075'; break;
    case ($High <= 84) and ($High >= 80): $cHigh = 'C6T084080'; break;
    case ($High <= 89) and ($High >= 85): $cHigh = 'C6T089085'; break;
    case ($High <= 94) and ($High >= 90): $cHigh = 'C6T094090'; break;
    case ($High <= 99) and ($High >= 95): $cHigh = 'C6T099095'; break;
    case ($High <= 104) and ($High >= 100): $cHigh = 'C6T104100'; break;
    case ($High <= 109) and ($High >= 105): $cHigh = 'C6T109105'; break;
    case ($High <= 114) and ($High >= 110): $cHigh = 'C6T114110'; break;
    case ($High <= 119) and ($High >= 115): $cHigh = 'C6T119115'; break;
    case ($High >= 120): $cHigh = 'C6T120'; break;
    }
NOT WORKING ABOVE THIS LINE!! */

echo "<tr>";
echo "<td>" . $row['Date'] . "</td>";
echo "<td>" . ($High) . "</td>"; // class='" $cHigh "' -- THIS IS WHERE IT ERRORS STRING
echo "<td>" . $row['Low'] . "</td>"; // class='" $cLow "'
echo "<td>" . $row['Average'] . "</td>";
echo "<td>" . $row['DFNorm'] . "</td>";
echo "<td>" . $row['HDD'] . "</td>";
echo "<td>" . $row['CDD'] . "</td>";
echo "<td>" . $row['Liquid'] . "</td>"; // class='" $cLiquid "'
echo "<td>" . $row['Snow'] . "</td>"; // class='" $cSnow "'
echo "<td>" . $row['SDepth'] . "</td>";
echo "<td>" . $row['WAvg'] . "</td>";
echo "<td>" . $row['WMax'] . "</td>"; // class='" $cWMax "'
echo "<td>" . $row['Clouds'] . "</td>"; // class='" $cClouds"'
echo "<td>" . $row['Weather'] . "</td>";
echo "</tr>";

}

?>

【问题讨论】:

    标签: php mysql css arrays string


    【解决方案1】:

    您不能将数组与整数进行比较。

    替换

    $High = array();
    $High[] = $row['High'];
    

    $High = $row['High'];
    

    没有必要把它变成一个数组,因为你只需要一个值。

    如果您想检查一系列值,您也不能使用switch($High)。相反,您可以使用switch(true)

    顺便说一句,您也不需要将 $cHigh 设为数组。

    【讨论】:

    • 谢谢!做到了!我发现要使格式正常工作,应用相同的规则并使用 . ($Var) 。在那里!
    • 我有一个问题 - 我昨晚能够让第一个条件格式部分工作,但在我开始定义第二个开关后,它似乎一直出错,只显示一个白页。我假设这是因为我使用的是 switch($High) 和 switch($Low) 而不是两个 switch(true)[s]。
    • 没有更多细节无法确定,但似乎很有可能。您应该查看docs on the switch statement 了解更多信息。并在您的开发环境中打开错误报告 - 这样您实际上会收到错误消息而不是空白页。