. */ /** * For more information, please contact */ namespace Goat1000\SVGGraph; /** * Class for sorting array by field */ class FieldSort { private $key = null; private $reverse = false; public function __construct($key, $reverse = false) { $this->key = $key; $this->reverse = $reverse; } /** * Sorts the array based on value of key field */ public function sort(&$data) { $key = $this->key; $get_val = function($a, $key) { return (!isset($a[$key]) || $a[$key] === null ? PHP_INT_MIN : $a[$key]); }; $bigger = function($a, $b, $key) use($get_val) { $va = $get_val($a, $key); $vb = $get_val($b, $key); if($va == $vb) return 0; return $va > $vb ? 1 : -1; }; $smaller = function($a, $b, $key) use($get_val) { $va = $get_val($a, $key); $vb = $get_val($b, $key); if($va == $vb) return 0; return $va < $vb ? 1 : -1; }; $fn = $this->reverse ? $smaller : $bigger; usort($data, function($a, $b) use($key, $fn) { return $fn($a, $b, $key); }); } }