Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to group a multidimensional array by a particular subarray value?

I have a multidimensional array and am trying to group them according to the value in a specific column.

I'm trying to group them by level, but I won't actually know the level beforehand. So, it's not like I can put it in a for loop and say while $i < 7, because I won't know that 7 is the maximum value for the level key, and frankly, I'm not sure that's how I would need to do it even if I did...

Array (    [0] => Array (           [cust] => XT8900           [type] => standard           [level] => 1           )    [1] => Array (           [cust] => XT8944           [type] => standard           [level] => 1           )    [2] => Array (           [cust] => XT8922           [type] => premier           [level] => 3           )    [3] => Array (           [cust] => XT8816           [type] => permier           [level] => 3           )    [4] => Array (           [cust] => XT7434           [type] => standard           [level] => 7           ) ) 

What I'm hoping to produce:

Array (     [1] => Array (           [0] => Array (                     [cust] => XT8900                     [type] => standard                     )           [1] => Array (                     [cust] => XT8944                     [type] => standard                     )           )     [3] => Array (           [2] => Array (                  [cust] => XT8922                  [type] => premier                  )            [3] => Array (                  [cust] => XT8816                  [type] => permier                  )           )     [7] => Array (           [4] => Array (                  [cust] => XT7434                  [type] => standard                  )           ) ) 
like image 241
n00b0101 Avatar asked Feb 03 '10 04:02

n00b0101


1 Answers

Best way, if you have control over building the initial array, is just set things up like that at the start as you add entries.

If not then build a temporary array to sort:

foreach ($input_arr as $key => &$entry) {     $level_arr[$entry['level']][$key] = $entry; } 

Leaves you with the form you wanted and everything referenced together.

Build the array like that in the first place though if at all possible.

like image 196
Mike Avatar answered Oct 17 '22 16:10

Mike