reverse = $reverse; } function sort(&$array){ $this->actualSort($array); if ($this->reverse) { $array = array_reverse($array); } } protected function actualSort(&$array){ usort($array, array($this, 'comparator')); } abstract function comparator($item1, $item2); } class nspages_default_sorter extends nspages_sorter { function __construct($reverse){ parent::__construct($reverse); } function comparator($item1, $item2){ return strcasecmp($item1['sort'], $item2['sort']); } } class nspages_naturalOrder_sorter extends nspages_sorter { function __construct($reverse){ parent::__construct($reverse); } function comparator($item1, $item2){ return strnatcasecmp($item1['sort'], $item2['sort']); } } class nspages_dictOrder_sorter extends nspages_sorter { private $dictOrder; function __construct($reverse, $dictOrder){ parent::__construct($reverse); $this->dictOrder = $dictOrder; } function actualSort(&$array){ $oldLocale=setlocale(LC_ALL, 0); setlocale(LC_COLLATE, $this->dictOrder); usort($array, array($this, "comparator")); setlocale(LC_COLLATE, $oldLocale); } function comparator($item1, $item2){ return strcoll($item1['sort'], $item2['sort']); } }