1

JSON 形式で温度と場所の値を取得するために API を使用しています。出力をプレーンテキストのキャッシュファイルに書き込んでいます。

ただし、温度ステーションが温度値の報告に失敗する場合があり、その場合、出力は空の行 (\n) になります。非通報局には「N/A」と表示することで対応したい。

以下は、最初のステーションが温度と位置を報告し、2 番目のステーションがシャットダウンした (2 つの空の行を報告する) 典型的なキャッシュファイルです。

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 (ナポリ-ポジリポ) | 該当なし () | N/A°C (平均) | 12 分 21 秒前

file() の代わりに fgets() を試してみましたが、エラーが発生しました:

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

比較は次のようになります (2 つの等号の使用に注意してください) 。

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

現在のコードは true と評価される に割り当て"\n"られています。これが条件が実行$temperature[1]されている理由です。if

を使用したい場合empty()は、呼び出しを次のように変更することをお勧めしますfile()

$display = file($cachename, FILE_IGNORE_NEW_LINES);

フラグを追加すると、関数は配列要素の末尾にFILE_IGNORE_NEW_LINES改行 ( ) を追加しないように指示されます。"\n"

于 2012-07-05T17:08:41.427 に答える