对查询结果集进行正向、逆向和自然排序

jerry thinkphp 2015年11月18日 收藏

该方法可以用于对ThinkPHP的查询数据集(模型类的select方法的返回值)进行动态排序,支持正向、逆向和自然排序。
/**
 +----------------------------------------------------------
 * 对查询结果集进行排序
 +----------------------------------------------------------
 * @access public
 +----------------------------------------------------------
 * @param array $list 查询结果
 * @param string $field 排序的字段名
 * @param string $sortby 排序类型
 * asc正向排序 desc逆向排序 nat自然排序
 +----------------------------------------------------------
 * @return array
 +----------------------------------------------------------
 */
function list_sort_by($list,$field, $sortby='asc') {
   if(is_array($list)){
       $refer = $resultSet = array();
       foreach ($list as $i => $data)
           $refer[$i] = &$data[$field];
       switch ($sortby) {
           case 'asc': // 正向排序
                asort($refer);
                break;
           case 'desc':// 逆向排序
                arsort($refer);
                break;
           case 'nat': // 自然排序
                natcasesort($refer);
                break;
       }
       foreach ( $refer as $key=> $val)
           $resultSet[] = &$list[$key];
       return $resultSet;
   }
   return false;
}
使用示例(下面的示例代码仅在ThinkPHP环境下面有效):
$Blog = M('Blog');
$list = $Blog->limit(10)->select();
$list1 = list_sort_by($list,'status','desc'); // 对结果集按照status字段逆向排序
$list2 = list_sort_by($list,'cate_id','asc'); // 对结果集按照cate_id字段正向排序