name = $name; $this->position = $position; } } $data = array(new Data('Mary Johnson', 'Secretary'), new Data('Amanda Miller', 'Member'), new Data('James Brown', 'Member'), new Data('Patricia Williams', 'Member'), new Data('Michael Davis', 'President'), new Data('Sarah Miller', 'Vice-President'), new Data('Patrick Miller', 'Member')); /* start sort */ $sortorder = array_flip(array('President', 'Vice-President', 'Secretary', 'Member')); usort($data, function($a, $b) use($sortorder) { if($a->position == $b->position) return strcmp($a->name, $b->name); else return $sortorder[$a->position] - $sortorder[$b->position]; } ); /* end sort */ foreach($data as $o) { echo $o->name . ' ' . $o->position . "\r\n"; } ?>