我正在使用API来检索JSON格式的某些温度和位置值.我在纯文本缓存文件中写输出.
然而,温度站可能无法报告温度值,在这种情况下,我的输出将是空行(\n).我想通过显示非报告站的"N/A"来处理这种情况.
这是一个典型的缓存文件,第一个站报告温度和位置,第二个站关闭(报告两个空行):
27.6
Napoli-Posillipo
(an empty line)
(an empty line)
Run Code Online (Sandbox Code Playgroud)
我尝试过:
$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>";
Run Code Online (Sandbox Code Playgroud)
但是,即使第一个工作站正确报告其温度值,我仍然会为两个工作站获得"N/A".
N/A°C(Napoli-Posillipo)| N/A°C()| N/A°C(平均)| 12分21秒前
我尝试使用fgets()而不是file(),但是我收到了一个错误:
fgets()期望参数1是资源,在第54行的[...]中给出
我也试过使用if(空($ temperature [foo]))但它没有用,因为当然\n!=空.
任何提示?提前致谢
你的比较应该是这样的(注意使用两个等号):
if($temperature[0] == "\n"){
Run Code Online (Sandbox Code Playgroud)
您当前的代码分配"\n"给$temperature[1],其值为true,这就是if条件执行的原因.
如果您想使用empty(),我建议您这样做,请将您的电话file()改为:
$display = file($cachename, FILE_IGNORE_NEW_LINES);
Run Code Online (Sandbox Code Playgroud)
添加FILE_IGNORE_NEW_LINES标志将告诉函数不要"\n"在数组元素的末尾添加换行符().
你也可以使用:
if (trim($temperature[1]) == '') {
// Empty line.
}
Run Code Online (Sandbox Code Playgroud)