Page 1 of 1

group by in php associative array?

Posted: Wed Nov 19, 2008 1:15 am
by pmliju
Hi All,

I have an associative array like,

Code: Select all

 
$arrAges = array(
 
    0 => array(
        'name' => 'alice',
        'age' => 26
    ),
 
    1 => array(
        'name' => 'bob',
        'age' => 29
    ),
    
    2 => array(
        'name' => 'alice',
        'age' => 25
    ),
    3 => array(
        'name' => 'bob',
        'age' => 30
    ),  
 
    4 => array(
        'name' => 'carol',
        'age' => 22
    ),
 
    5 => array(
        'name' => 'carol',
        'age' => 18
    ),
 
    6 => array(
        'name' => 'alice',
        'age' => 21
    ),
 
    7 => array(
        'name' => 'carol',
        'age' => 16
    ),
 
    8 => array(
        'name' => 'bob',
        'age' => 31
    ),  
    
    9 => array(
        'name' => 'alice',
        'age' => 19
    ),
 
    10 => array(
        'name' => 'carol',
        'age' => 15
    ),
 
    11 => array(
        'name' => 'bob',
        'age' => 32
    ),  
);
 
 
I need to get rid of the least two ages from each name and should get the average of the remaining (group by name)

for example, for carol, I should get age 20.

Can anyone help me?

Re: group by in php associative array?

Posted: Wed Nov 19, 2008 3:13 am
by novice4eva

Code: Select all

 
$tmpArray = array();
foreach($arrAges as $data)
{
$tmpArray[$data['name']]['TOTAL']+=$data['age'];
$tmpArray[$data['name']]['COUNT']+=1;
}
$arrAges = array();
foreach($tmpArray as $key=>$val)
{
array_push($arrAges,array('name'=>$key,'age'=>$val['TOTAL']/$val['COUNT']);
}
 
I haven't tried this code in real, but i think this should replace your actual array with averages ones in same array format.
:drunk: