_elements = $elements; } /** * @return array */ public function sort() { $callback = array($this->_comparator, 'compare'); uasort($this->_elements, $callback); return $this->_elements; } /** * @param Comparator $comparator * @return void */ public function setComparator(Comparator $comparator) { $this->_comparator = $comparator; } } class IdComparator implements Comparator { public function compare($a, $b) { if ($a['id'] == $b['id']) { return 0; } else { return $a['id'] < $b['id'] ? -1 : 1; } } } class DateComparator implements Comparator { public function compare($a, $b) { $aDate = strtotime($a['date']); $bDate = strtotime($b['date']); if ($aDate == $bDate) { return 0; } else { return $aDate < $bDate ? -1 : 1; } } } $elements = array( array( 'id' => 2, 'date' => '2011-01-01', ), array( 'id' => 1, 'date' => '2011-02-01' ) ); $collection = new ObjectCollection($elements); $collection->setComparator(new IdComparator()); $collection->sort(); $collection->setComparator(new DateComparator()); $collection->sort();