如何在 PHP 中合并一组预测数据?

How can I conglomerate an array of forecast data in PHP?

设置

我有一组降雨概率作为预报输出:

$rain_probability = array(
  '7am'  => '33',
  '8am'  => '0',
  '9am'  => '8',
  '10am' => '7',
  '11am' => '8',
  '12pm' => '19',
  '1pm'  => '8',
  '2pm'  => '13',
  '3pm'  => '50',
  '4pm'  => '50',
  '5pm'  => '60',
  '6pm'  => '60',
  '7pm'  => '7',
  '8pm'  => '5',
  '9pm'  => '0'
);

$forecast = 'The likelihood of rain is: ';

foreach( $rain_probability as $hour => $percentage )
{
  $forecast .= "$hour: $percentage%. \n";
}

echo $forecast;

结果

The likelihood of rain is:
7am 33%.
8am 0%.
9am 8%.
10am 7%.
11am 8%.
12pm 19%.
1pm 8%.
2pm 13%.
3pm 50%.
4pm 50%.
5pm 60%.
6pm 60%.
7pm 7%.
8pm 5%.
9pm 0%.

期望的结果

我希望它更人性化,像这样:

The likelihood of rain is:
7am: 33%.
8am-11am: less than 10%.
12pm: 19%.
1pm: 8%.
2pm: 13%.
3pm-4pm: 50%.
5pm-6pm: 60%.
7pm-9pm: less than 10%.

我试过的

认为这会很简单,所以我开始编写一个循环来检查前一小时的概率是否与当前小时相同。然后需要对小于 10% 的数字进行特殊处理。然后必须对第一个和最后一个数组元素进行特殊处理。很快我就陷入了很多条件语句之中,并且(请原谅双关语)代码不再很枯燥了。并且不确定某些组合或概率序列不会出现错误,并且可以为此设置测试。但总体上开始感觉我可能正在重新发明轮子,也许有更好的方法。

问题

我的问题不是 "how can I make this work" - 而是是否存在解决此问题的 class 逻辑方法、模式,甚至是 class 或库? (有点像计算机科学作业)

也许这会有所帮助 https://github.com/php-ai/php-ml 如果我没看错你需要 k-means

看起来并不复杂,只是需要一点爱...

输入:

$rain_probability = array(
  '7am'  => '33',
  '8am'  => '0',
  '9am'  => '8',
  '10am' => '7',
  '11am' => '8',
  '12pm' => '19',
  '1pm'  => '8',
  '2pm'  => '13',
  '3pm'  => '50',
  '4pm'  => '50',
  '5pm'  => '60',
  '6pm'  => '60',
  '7pm'  => '7',
  '8pm'  => '5',
  '9pm'  => '0'
);

方法(Demo):

array_walk($rain_probability,function(&$v){$v=($v<10)?'Less than 10%.':"$v%.";}); // prep %

$forecast="The likelihood of rain is:\n";
$start=$end=$perc='';
foreach($rain_probability as $hour=>$percent){
    if($perc==$percent){                               // merge forecast line
        $end="-{$hour}";
        $perc=$percent;
    }else{                                             // start new forecast line
        if($start){$forecast.="$start$end: $perc\n";}  // skip on first iteration
        $start=$hour;
        $end='';
        $perc=$percent;
    }
}
$forecast.="$start$end: $perc";                        // add final forecast line
echo $forecast;

输出:

The likelihood of rain is:
7am: 33%.
8am-11am: Less than 10%.
12pm: 19%.
1pm: Less than 10%.
2pm: 13%.
3pm-4pm: 50%.
5pm-6pm: 60%.
7pm-9pm: Less than 10%.