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

[時間] が同じであるすべての値をグループ化し、その時間の平均ユーザーを取得しようとしています。したがって、この例では、07:00 のユーザーは 2.33 になり、2 に丸められます。

私はできるだけ明確にしようとしましたが、これが何らかの意味をなすことを望んでいます...

4

2 に答える 2

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

データがどのように構造化されているかにより、2 つのパスで行う必要があります。まず、データを使用できるようにフォーマットする必要があります。それが完了したら、先に進んで平均を計算できます。

いくつかのデータが与えられた場合:

$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 に答える