У меня есть массив вероятности дождя, который я выводил в качестве прогноза:
$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;
Вероятность дождя:
7 утра 33%.
8:00 0%.
9:00 8%.
10:00 7%.
11:00 8%.
12 вечера 19%.
13:00 8%.
14:00 13%.
15:00 50%.
4 вечера 50%.
5 вечера 60%.
6 вечера 60%.
7 вечера 7%.
8 вечера 5%.
9 вечера 0%.
Я хотел бы, чтобы это было более дружественным к человеку, как это:
Вероятность дождя:
7:00: 33%.
8 утра-11 утра: менее 10%.
12:00: 19%.
13:00: 8%.
14:00: 13%.
15:00 — 16:00: 50%.
5 вечера до 6 вечера: 60%.
19:00 — 21:00: менее 10%.
Думал, что это будет довольно просто, поэтому я начал писать цикл, который проверял бы, была ли вероятность для предыдущего часа такой же, как текущий час. Тогда нужно для особого случая для чисел менее 10%. Затем пришлось в особом случае первый и последний элементы массива. Довольно скоро я оказался в центре множества условных утверждений и (извините за каламбур) код уже не был очень сухим. И не был уверен, что не будет ошибок с определенными комбинациями или последовательностями вероятностей, и мог бы установить для этого тесты. Но в целом стало казаться, что я, может быть, заново изобретаю колесо, и что, возможно, был лучший подход.
Мой вопрос не в том, «как я могу заставить это работать», а в том, существует ли классический подход, шаблон или даже класс или библиотека для решения этой проблемы? (Вроде как домашнее задание по информатике)
Это не кажется слишком запутанным, просто нужно немного любви …
Входные данные:
$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'
);
Метод (демонстрация):
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%.
Может быть, это поможет https://github.com/php-ai/php-ml
Если я правильно понимаю, вам нужно k-means