Как я могу конгломерировать массив данных прогноза в 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;

Результаты, достижения

Вероятность дождя:
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%. Затем пришлось в особом случае первый и последний элементы массива. Довольно скоро я оказался в центре множества условных утверждений и (извините за каламбур) код уже не был очень сухим. И не был уверен, что не будет ошибок с определенными комбинациями или последовательностями вероятностей, и мог бы установить для этого тесты. Но в целом стало казаться, что я, может быть, заново изобретаю колесо, и что, возможно, был лучший подход.

Вопрос

Мой вопрос не в том, «как я могу заставить это работать», а в том, существует ли классический подход, шаблон или даже класс или библиотека для решения этой проблемы? (Вроде как домашнее задание по информатике)

1

Решение

Это не кажется слишком запутанным, просто нужно немного любви …

Входные данные:

$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%.
2

Другие решения

Может быть, это поможет https://github.com/php-ai/php-ml
Если я правильно понимаю, вам нужно k-means

1

По вопросам рекламы [email protected]