2014-09-29 3 views
-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. 가능한 한 명확하게하려고

반올림과

+1

나에게 꽤 솔직를 보인다. 너 뭐 해봤 니? –

+0

나는 array_unique(), 직렬화 및 unserializing, 및 다른 많은 것들을 시도했지만 때마다 동일한 배열을 다시. 어쩌면 내가 시간을 정하는 것과 동시에 (8시 13 분에서 8 시까 지) 그렇게한다면 더 쉬울 것입니다. – powerthepower

답변

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); 
+0

당신은 나의 구세주입니다! 나는이 아이디어가 오지 않기 위해 나에게 무엇이 잘못되었는지를 모른다. 아마 나는 단지 overthinking해야합니다 :) – powerthepower

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