Я хочу написать статический метод в классе для общей сортировки массива объектов.
Я думаю о чем-то вроде:
class GenUtils {
const ASCENDING = 1;
const DESCENDING = 2;
protected static alphaSort($value1, $value2, $sort_type=self::DESCENDING){
$retval = strcasecmp($value1, $value2);
return ($sort_type == self::DESCENDING) ? $retval : (-1*$retval);
}
protected static numericSort($value1, $value2, $sort_type=self::DESCENDING){
return $value1 < $value2;
}
// Assumption: array is non-empty and homogeneous
public doSort(array& $object_array, $method_name, $sort_type=self::DESCENDING) {
if(!empty($object_array) && method_exists($object_array[0],$method_name)) {
$element = $object_array[0];
$value = $element->$method_name();
if(is_string($value)){
//do string sort (possibly using usort)
}
elseif(is_number($value)){
//do numeric sort (possibly using usort)
}
}
}
}
Это просто быстрая мозговая утечка - может кто-то может заполнить недостающие фрагменты или предложить лучший способ сделать это?
[Изменить]
Просто чтобы уточнить, объекты, которые должны быть отсортированы (в массиве), имеют методы, которые возвращают либо строку (например, getName ()), либо числовое значение (например, getId ())
Типичный фрагмент кода использования будет выглядеть примерно так:
GenUtils::doSort($objects,'getName'); // This will do an alphabetic DESC sort using the getName() method
GenUtils::doSort($objects, 'getId', GenUtils::ASCENDING); // This will do a numeric ASC sort using the getId() method