1

我正在使用 API 以 JSON 格式检索一些温度和位置值。我正在将输出写入纯文本缓存文件。

但是,温度站可能无法报告温度值,在这种情况下,我的输出将是一个空行 (\n)。我想通过为非报告站显示“N/A”来处理这种情况。

这是一个典型的缓存文件,第一个站报告温度和位置,第二个站关闭(报告两个空行):

27.6
Napoli-Posillipo
(an empty line)
(an empty line)

我试过:

$display = file($cachename);
$temperature[0] = $display[0];
$location[0] = $display[1];
$temperature[1] = $display[2];
$location[1] = $display[3];

$temp_avg = (($temperature[0]+$temperature[1])/2); //average temperature

if($temperature[0] = "\n"){ //if weather station is not reporting data
   $temperature[0] = "N/A";
   $temp_avg = "N/A";
}

if($temperature[1] = "\n"){
   $temperature[1] = "N/A";
   $temp_avg = "N/A";
}


echo "<div id='temperature'><b>".$temperature[0]."</b>°C (".$location[0].") | ";
echo "<b>".$temperature[1]."</b>°C (".$location[1].") | ";
echo "<b>".$temp_avg."</b>°C (avg) | ".$minutes."m".$secondsleft."s ago</div>";

但是,即使第一个站正确报告了它的温度值,我也不断得到两个站的“N/A”。

N/A°C (那不勒斯-波西利波) | 不适用°C () | N/A°C (平均) | 12 分 21 秒前

我尝试使用 fgets() 而不是 file(),但出现错误:

fgets() 期望参数 1 是资源,第 54 行 [...] 中给出的字符串

我也尝试过使用if(empty($temperature[foo]))但它没有用,因为当然\n != empty

有什么提示吗?提前致谢

4

2 回答 2

6

您还可以使用:

if (trim($temperature[1]) == '') {
  // Empty line.
}
于 2012-07-05T17:10:21.653 回答
5

您的比较应如下所示(注意使用两个等号):

if($temperature[0] == "\n"){ 

您当前的代码分配"\n"$temperature[1],其评估结果为真,这就是if条件执行的原因。

如果您想使用empty(),我建议您这样做,请将您的呼叫更改file()为:

$display = file($cachename, FILE_IGNORE_NEW_LINES);

添加FILE_IGNORE_NEW_LINES标志将告诉函数不要将换行符 ( "\n") 添加到数组元素的末尾。

于 2012-07-05T17:08:41.427 回答