PHP 快速排序 与二维数组排序

1、快速排序

function quick_sort($arr)
{
    //判断参数是否是一个数组
    if(!is_array($arr)) return false;
    //递归出口:数组长度为1,直接返回数组
    $length = count($arr);
    if($length<=1) return $arr;
    //数组元素有多个,则定义两个空数组
    $left = $right = array();
    //使用for循环进行遍历,把第一个元素当做比较的对象
    for($i=1; $i<$length; $i++)
    {
      //判断当前元素的大小
        if($arr[$i]>$arr[0]){
            $left[]=$arr[$i];
        }else{
            $right[]=$arr[$i];
        }
    }
    //递归调用
    $left=quick_sort($left);
    $right=quick_sort($right);
    //将所有的结果合并
    return array_merge($left,array($arr[0]),$right);
}

 2、二维数据排序

function dump($var, $exit = true) {
    echo '<pre>';
    print_r ( $var );
    echo '</pre>';
    if ($exit) {
        die ();
    }
}
/**
 * 多维数组排序,第一个参数需要排序的数组,第二个参数需要排序的字段,第三个参数是排序方式
 * 例1: array_orderby($list, 'age', SORT_DESC);
 * 例2:$list = array_orderby($list, 'age', SORT_ASC(4), 'name', SORT_DESC(3));
 * @return mixed
 */
function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
        }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}

 

//array_orderby用法
$list = [
    [
        'name' => 'abc',
        'age'  => 19,
    ],
    [
        'name' => 'ddd',
        'age'  => 13,
    ],
    [
        'name' => 'bb',
        'age'  => 29,
    ],
    [
        'name' => 'cc',
        'age'  => 21,
    ],
    [
        'name' => 'dc',
        'age'  => 21,
    ],
];
$list = array_orderby($list, 'age', SORT_ASC, 'name', SORT_DESC);
dump($list);

 http://www.sgfoot.com/view/161

 

posted @ 2018-08-01 14:30  炜华  阅读(146)  评论(0编辑  收藏  举报