在PHP中对对象数组进行排序

时间:2010-01-30 16:03:04

标签: php

我想在类中编写一个静态方法来对一组对象进行一般排序。

我正在考虑以下几点:

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

2 个答案:

答案 0 :(得分:1)

示例中的用例(数字和字符串)已经内置到PHP中 - 查看sort函数。我会使用内置函数,除非我有更多特定需求。

答案 1 :(得分:1)

使用usort并定义自己的比较功能以处理对象。