【问题标题】:Given an array, find zero values and replace them with the average of immediately bordering values给定一个数组,找到零值并将它们替换为直接相邻值的平均值
【发布时间】:2012-08-02 16:13:05
【问题描述】:

我有一组按小时计算的温度数据。有些小时有零数据而不是临时。使用 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 的脚本:

  $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;
  };

如果数据是我的,This Example 会很好用,但可惜它来自 JSON 提要。

我会使用 array_walk() 之类的交易吗?我将如何引用数组中的当前位置?任何帮助表示赞赏!

【问题讨论】:

  • 你用 $key 引用数组中的当前位置。

标签: php arrays average zero


【解决方案1】:

我会删除 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;
  }

}
?>

这当然假设零两侧的值也不为零。您可能需要在其中某处添加检查。

经过测试和验证的方法。

【讨论】:

  • 成功了!谢谢!其他日子也有 PM,但我想我已经弄清楚了。还要检查连续的零,如果它在数组的末尾或开头是零。谢谢!
  • 甜蜜,很高兴它对你有用!是的,你可以很容易地解释上午或下午。
【解决方案2】:

你不能做一些类似的事情:

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

其中$key为数组位置,取0之前的值,0之后的值相加除以2取平均值。

【讨论】:

  • 您也可以使用 array_keys() 快速完成 +1 -1
【解决方案3】:

我会让你理清如果第一个、最后一个或连续的值为 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);
    }
}

【讨论】:

  • 应该是$value==0,$the_key也应该是$the_keys
猜你喜欢
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多