我有一个按小时排列的温度数据数组。有些小时的数据为零,而不是温度。当使用谷歌图表绘图时,零会导致折线图直线下降。我的临时修复方法是将零值替换为null,从而导致折线图中断。理想的解决方案是取零两边的值,并对它们取平均值。数组按小时顺序排列。帮助
$array = array(
"1AM" => "65",
"2AM" => "66",
"3AM" => "68",
"4AM" => "68",
"5AM" => "68",
"6AM" => "0",
"7AM" => "70",
"8AM" => "71",
"9AM" => "71",
"10AM" => "73",
);
以下是我用null替换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;
};
如果数据是我的,这个例子会很好用,但遗憾的是,它来自JSON提要。
我会使用array_walk()类型的交易吗?如何引用数组中的当前位置?感谢您的帮助!
我会去掉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;
}
}
?>
当然,这是假设零两边的值也不为零。你可能想在那里的某个地方添加一张支票。
经过测试和验证的方法。
你不能做一些类似的事情吗
str_replace(0, ((($key-1)+($key+1))/2), $temp);
其中$key是数组位置,取0之前和0之后的值将它们相加并除以2得到平均值。
如果第一个、最后一个或连续的值为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);
}
}