public static function sort($data, $field, $descending = false) { Assume::isArray($data); usort($data, function (BasicRecord $a, BasicRecord $b) use($field, $descending) { if ($a->{$field} == $b->{$field}) { return 0; } if ($descending) { if (is_numeric($a->{$field})) { return $b->{$field} - $a->{$field}; } return strcmp($b->{$field}, $a->{$field}); } else { if (is_numeric($a->{$field})) { return $a->{$field} - $b->{$field}; } return strcmp($a->{$field}, $b->{$field}); } }); return $data; }