Я много смотрел в Интернете, чтобы найти решение моей проблемы, но ничего не помогло в моем конкретном случае.
У меня есть массив часов и активных пользователей, как указано ниже:
Array (
[0] => Array (
[time] => 05:00 ,
[users] => 0
),
[1] => Array (
[time] => 06:00,
[users] => 0
),
[2] => Array (
[time] => 07:00,
[users] => 1
),
[3] => Array (
[time] => 07:00,
[users] => 3
)
[4] => Array (
[time] => 07:00,
[users] => 3
),
[5]=> Array (
[time] => 08:00,
[users] => 0
)
)
Я пытаюсь сгруппировать все значения, где [время] одинаково и получить среднее количество пользователей за это время. Таким образом, в этом примере для пользователей 07:00 будет 2,33 и округлено до 2.
Я старался быть максимально понятным и надеюсь, что в этом есть какой-то смысл …
Создайте новый массив, где ключом является время, а значением является массив пользовательских значений для этого времени. Затем преобразуйте значение в среднее, разделив сумму значения на количество элементов.
$grouped_by_time = array();
foreach($array as $element) {
$grouped_by_time[$element['time']][] = $element['users'];
}
foreach($grouped_by_time as &$element) {
$element = round(array_sum($element)/count($element));
}
print_r($grouped_by_time);
Ну, из-за того, как ваши данные структурированы, вам придется сделать это в два этапа. Сначала необходимо отформатировать данные таким образом, чтобы они стали пригодными для использования. Как только это будет сделано, вы можете пойти дальше и рассчитать средние значения.
Учитывая некоторые данные:
$data = [
['time' => '05:00', 'users' => 0],
['time' => '06:00', 'users' => 0],
['time' => '07:00', 'users' => 1],
['time' => '07:00', 'users' => 3],
['time' => '07:00', 'users' => 3],
['time' => '08:00', 'users' => 0],
];
Переформатируйте это так, чтобы это стало пригодным для использования:
$coll = [];
foreach ($data as $item) {
$time = $item['time'];
if ( ! isset($coll[$time])) {
$coll[$time] = [];
}
$coll[$time][] = $item['users'];
}
Затем вычислите средние значения:
echo '<pre>';
foreach ($coll as $time => $entries) {
$sum = array_sum($entries);
$avg = round($sum / count($entries));
echo "{$time} had an average of {$avg} users\n";
}
var_dump($coll);