group by in php associative array?

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
pmliju
Forum Newbie
Posts: 2
Joined: Mon May 15, 2006 4:17 am

group by in php associative array?

Post 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?
User avatar
novice4eva
Forum Contributor
Posts: 327
Joined: Thu Mar 29, 2007 3:48 am
Location: Nepal

Re: group by in php associative array?

Post 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:
Post Reply