1

時間ごとの温度データの配列があります。一部の時間には、一時ではなくデータがありません。Google Charts を使用してグラフを作成すると、ゼロによって折れ線グラフが急落します。私の一時的な修正は、ゼロ値をnullに置き換えることでした。これにより、折れ線グラフが壊れました。理想的な解決策は、ゼロの両側の値を取り、それらを平均することです。配列は時間順に並んでいます。ヘルプ?

$array = array(
    "1AM" => "65",
    "2AM" => "66",
    "3AM" => "68",
    "4AM" => "68",
    "5AM" => "68",
    "6AM" => "0",
    "7AM" => "70",
    "8AM" => "71",
    "9AM" => "71",
    "10AM" => "73",
);

0 を null に置き換えるスクリプトは次のとおりです。

  $array = array ();
  foreach($parsed_json->history->observations as $key => $value) {
    $temp = (int)$value->tempi;
    if ($temp==0) {
        str_replace(0, null, $temp);
    }
    $hour = $value->date->hour;
    $array[$hour] = $temp;
  };

この例は、データが私のものであればうまく機能しますが、残念ながら、JSON フィードからのものです。

array_walk() のような取引を使用しますか? 配列内の現在の場所を参照するにはどうすればよいですか? どんな助けでも大歓迎です!

4

3 に答える 3

2

null部分をスクラッチして、最終的な配列をforeachループします。

したがって、現在のコードを次のように変更します。

$array = array ();

foreach($parsed_json->history->observations as $key => $value) {
    $temp = (int)$value->tempi;
}

$hour = $value->date->hour;
$array[$hour] = $temp;

そして、その下にこれを追加します:

foreach($array as $hour => $temp){

  if($temp == "0"){
      $numHour = $hour[0];
      $hourPlus  = ($numHour + 1) . "AM";
      $hourMinus = ($numHour - 1) . "AM";

      $valuePlus  = $array[$hourPlus];
      $valueMinus = $array[$hourMinus];

      $average = ($valuePlus + $valueMinus)/2;

      $array[$hour] = $average;
  }

}
?>

もちろん、これは、ゼロの両側の値もゼロではないことを前提としています。どこかにそのチェックを追加することをお勧めします。

テストされ、証明された方法。

于 2012-08-02T16:34:34.893 に答える
0

最初、最後、または連続する値が 0 の場合に何が起こるかを整理します。

$the_keys=array_keys($array);
foreach($the_key as $index=>$key)
{
    if($array[$key]==0)
    {
        $array[$key]=($array[$the_key[$index-1]]+$array[$the_key[$index+1]]/2);
    }
}
于 2012-08-02T16:31:11.697 に答える
0

次の行に沿って何かを行うことはできませんでした:

str_replace(0, ((($key-1)+($key+1))/2), $temp);

$key は配列の位置で、0 の前と 0 の後の値を足し、2 で割って平均を求めます。

于 2012-08-02T16:19:24.047 に答える