Я хочу написать статический метод в классе для общего сортирования массива объектов.Сортировка массива объектов в PHP
Я имею в виду Somthing вдоль линий:
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)
}
}
}
}
Это просто быстрый дамп мозга -perharps кто-то может заполнить недостающие части, или предложить лучший способ сделать это?
[Редактировать] Просто для уточнения, объекты для сортировки (в массиве), есть методы, которые возвращают либо строку (например, GetName()) или числовое значение (например, GetId())
поэтомутипичный UseCase фрагмент кода будет somethimng так:
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
Почему бы не использовать 'natcasesort()' вместо этого? –