Skip to content

Instantly share code, notes, and snippets.

@aholstenson
Created September 12, 2012 10:05
Show Gist options
  • Save aholstenson/3705706 to your computer and use it in GitHub Desktop.
Save aholstenson/3705706 to your computer and use it in GitHub Desktop.
PHP sorting class
<?php
/**
* Sorting functions designed to be combined to reach desired result.
*
* Examples:
* $array = array('c', 'a', 'b');
* Sorting::sort($array, Sorting.string());
*
* $array = array('b' => 2, 'a' => 1);
* Sorting::sortAssoc($array, Sorting::number());
*
* $array = array(array('key' => 12), array('key' => 8));
* Sorting::sort($array, Sorting::onKey('key', Sorting::number()));
*/
class Sorting {
public static function string() {
return function ($a, $b) {
return strcmp($a, $b);
};
}
public static function stringNaturalOrder() {
return function ($a, $b) {
return strnatcmp($a, $b);
};
}
public static function stringCaseInsensitive() {
return function ($a, $b) {
return strcasecmp($a, $b);
};
}
public static function number() {
return function ($a, $b) {
return $a < $b ? -1 : ($a == $b ? 0 : 1);
};
}
public static function reverse($comparator) {
return function ($a, $b) use ($comparator) {
return $comparator($b, $a);
};
}
public static function onKey($key, $function) {
return function ($a, $b) use ($key, $function) {
return $function($a[$key], $b[$key]);
};
}
public static function sort(&$array, $comparator) {
usort($array, $comparator);
return $array;
}
public static function sortAssoc(&$array, $comparator) {
uasort($array, $comparator);
return $array;
}
public static function sortOnKey(&$array, $comparator) {
uksort($array, $comparator);
return $array;
}
}
// Example usage
$test = array(
'a3' => array('kaka' => 3),
'a1' => array('kaka' => 1),
'a2' => array('kaka' => 2)
);
Sorting::sortAssoc($test, Sorting::onKey('kaka', Sorting::number()));
while(list($key, $value) = each($test)) {
echo "$key: " . $value['kaka'] . "\n";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment