PHP之二维数组排序

二维数组排序

很多时候,从数据库取出来的数据是乱的,需要我们重新进行排序。这里提供一个公共的方法,如下:

/**
 * 二维数组排序
 * @param $data				数据数组
 * @param $field				排序字段
 * @param $order			排序规则:asc、desc		
 */
function resort($data = array(), $field = 'sort', $order = 'asc') 
{
	$sort['field'] = $is_date ? 'sort_datetime' : $field;
	if ($order == 'asc') {
	    $sort['direction'] = 'SORT_ASC';
	} else if ($order == 'desc') {
	    $sort['direction'] = 'SORT_DESC';
	} else {
	    return array();
	}
	$arrSort = array();
	foreach ($data AS $k => $v) {
	    foreach ($v AS $k2 => $v2) {
	        $arrSort[$k2][$k] = $v2;
	    }
	}
	
	if ($sort['direction']) {
	    array_multisort($arrSort[$sort['field']], constant($sort['direction']), $data);
	}
	return $data;
}


进阶升级

/**
 * 二维数组排序
 * @param $array        数据数组
 * @param $cond         条件(结构为:array(
 *											array(列名1, SORT_ASC/SORT_DESC, SORT_STRING/SORT_NUMERIC),
 *                                         	array(列名1, SORT_ASC/SORT_DESC, SORT_STRING/SORT_NUMERIC)
 *                                    )
 *						第三参数表示按照string还是数字进行排序,可不传,可为空,默认为类型不变进行排序)
 */
function resort($array, $cond)
{
    if(!is_null($array) && count($array) > 0) {
        if(count($cond) == 0) {		// 如果没有排序条件,直接返回
            return $array;
        } else {
            $sortList = array();		  	// 排序规则列表
            $typeList = array();			// 排序字段类型列表
            foreach($cond as $sort) {
                $sortList[] = !empty($sort[1]) ? $sort[1] : SORT_DESC;
                $typeList[] = isset($sort[2]) ? $sort[2] : SORT_REGULAR;
            }
           
            $valueList = array();		// 值列表
            foreach($cond as $sort) {
                $columnName = $sort[0];
                $values = array();
                foreach($array as $index => $row) {
                    $values[] = $row[$columnName];
                }
 
                $valueList[] = $values;
            }
             
            $args = array();		// 参数列表
            for($i = 0; $i < count($cond); $i++) {
                $args[] = &$valueList[$i];
                $args[] = &$sortList[$i];
                $args[] = &$typeList[$i];
            }
            $args[] = &$array;
            call_user_func_array('array_multisort', $args);		// 进行排序操作
            return $array;
        }
    } else {
        return array();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值