From 4c8045f73325c8dc087085d14835caf05020ce2c Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Sat, 3 Sep 2011 12:57:28 +0200 Subject: [PATCH] added strategy pattern --- Strategy/Strategy.php | 111 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Strategy/Strategy.php diff --git a/Strategy/Strategy.php b/Strategy/Strategy.php new file mode 100644 index 0000000..45187b7 --- /dev/null +++ b/Strategy/Strategy.php @@ -0,0 +1,111 @@ +_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(); \ No newline at end of file