I have an array in PHP:
array (size=xxx)
  0 => 
    array (size=9)
      'cat' => string 'FIRST CAT'
      'dur' => string '10'
      'type' => string 'Type description 10'
      'start' => string '00:00'
      'end' => string '01:00'
      'desc' => string 'Event description 10-1'
      'price' => string 'xxx'
      'extra' => string 'yyy'
  1 => 
    array (size=9)
      'cat' => string ''
      'dur' => string ''
      'type' => string ''
      'start' => string '01:00'
      'end' => string '02:00'
      'desc' => string 'Event description 10-2'
      'price' => string ''
      'extra' => string ''
  2 => 
    array (size=9)
      'cat' => string ''
      'dur' => string ''
      'type' => string ''
      'start' => string '02:00'
      'end' => string '03:00'
      'desc' => string 'Event description 10-3'
      'price' => string ''
      'extra' => string ''
  3 => 
    array (size=9)
      'cat' => string ''
      'dur' => string '20'
      'type' => string 'Type description 20'
      'start' => string '00:00'
      'end' => string '01:00'
      'desc' => string 'Event description 20-1'
      'price' => string 'xxx'
      'extra' => string 'yyy'
  4 => 
    array (size=9)
      'cat' => string ''
      'dur' => string ''
      'type' => string ''
      'start' => string '01:00'
      'end' => string '02:00'
      'desc' => string 'Event description 20-2'
      'price' => string ''
      'extra' => string ''
  5 => 
    array (size=9)
      'cat' => string ''
      'dur' => string ''
      'type' => string 'Type description 21'
      'start' => string '00:00'
      'end' => string '01:00'
      'desc' => string 'Event description 21-1'
      'price' => string 'xxx'
      'extra' => string 'yyy'
  6 => 
    array (size=9)
      'cat' => string ''
      'dur' => string ''
      'type' => string ''
      'start' => string '01:00'
      'end' => string '02:00'
      'desc' => string 'Event description 21-2'
      'price' => string ''
      'extra' => string ''
  7 => 
    array (size=9)
      'cat' => string 'SECOND CAT'
      'dur' => string '10'
      'type' => string 'Type description 100'
      'start' => string '00:00'
      'end' => string '01:00'
      'desc' => string 'Event description 100-1'
      'price' => string 'xxx'
      'extra' => string 'yyy'
  8 => 
    array (size=9)
      'cat' => string ''
      'dur' => string ''
      'type' => string ''
      'start' => string '01:00'
      'end' => string '02:00'
      'desc' => string 'Event description 100-2'
      'price' => string ''
      'extra' => string ''
  9 => 
    array (size=9)
      'cat' => string ''
      'dur' => string '20'
      'type' => string 'Type description 200'
      'start' => string '00:00'
      'end' => string '01:00'
      'desc' => string 'Event description 200-1'
      'price' => string 'xxx'
      'extra' => string 'yyy'
  10 => 
    array (size=9)
      'cat' => string ''
      'dur' => string ''
      'type' => string ''
      'start' => string '01:00'
      'end' => string '02:00'
      'desc' => string 'Event description 200-2'
      'price' => string ''
      'extra' => string ''
  11 => 
    array (size=9)
      'cat' => string ''
      'dur' => string ''
      'type' => string 'Type description 210'
      'start' => string '00:00'
      'end' => string '01:00'
      'desc' => string 'Event description 210-1'
      'price' => string 'xxx'
      'extra' => string 'yyy'
  etc...
I need to group this array first by cat, then by dur, then type. This type array would have two strings - price and extra and another array which would consist of all the events data - start, end and desc. Final array outline (based on example above) should look like this:
'FIRST CAT'                                           // 'cat'
    '10'                                              // 'dur'
      'Type description 10', 'xxx', 'yyy'             // 'type', 'price', 'extra'
          (array of events)
          '00:00', '01:00', 'Event description 10-1'  // 'start', 'end', 'desc'
          '01:00', '02:00', 'Event description 10-2'  // 'start', 'end', 'desc'
          '02:00', '03:00', 'Event description 10-3'  // 'start', 'end', 'desc'
    '20'
      'Type description 20', 'xxx', 'yyy'
          (array of events)
          '00:00', '01:00', 'Event description 20-1'
          '01:00', '02:00', 'Event description 20-2'
      'Type description 21', 'xxx', 'yyy'
          (array of events)
          '00:00', '01:00', 'Event description 21-1'
          '01:00', '02:00', 'Event description 21-2'
'SECOND CAT'
    '10'
      'Type description 100', 'xxx', 'yyy'
          (array of events)
          '00:00', '01:00', 'Event description 100-1'
          '01:00', '02:00', 'Event description 100-2'
    '20'
      'Type description 200', 'xxx', 'yyy'
          (array of events)
          '00:00', '01:00', 'Event description 200-1'
          '01:00', '02:00', 'Event description 200-2'
      'Type description 210', 'xxx', 'yyy'
          (array of events)
          '00:00', '01:00', 'Event description 210-1'
          '01:00', '02:00', 'Event description 210-2'
What would be the simplest way to convert my existing array to the one I need in the end?
 
     
    