-2

我已经在互联网上进行了很多查找以找到解决问题的方法,但是对于我的具体情况没有任何效果。

我有一系列小时数和活跃用户如下:

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
        )
    ) 

我正在尝试对 [time] 相同的所有值进行分组,并获得该时间的用户平均值。所以在本例中,07:00 的用户数为 2,33,四舍五入为 2。

我试图尽可能清楚,并希望这是有道理的......

4

2 回答 2

2

Create a new array where the key is the time and the value is an array of user values for that time. Then convert the value into an average by dividing the sum of the value by its number of elements.

$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);
于 2014-09-29T03:39:58.130 回答
0

好吧,由于您的数据的结构方式,您将不得不分两次完成。首先,您需要以使其可用的方式格式化数据。完成后,您可以继续计算平均值。

给定一些数据:

$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);
于 2014-09-29T03:50:24.247 回答