很早之前看过一篇数组排序的文章,今天在做thinkphp项目要用到的时候却找不着了,于是又去网上狂搜,然后整理了一下,赶紧记下免得以后又忘了。

<?php

function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
    if(!is_array($ArrayData))  //判断传递的参数是不是数组
    {
        return $ArrayData;
    }

    // 得到参数传递过来的编号number
    $ArgCount = func_num_args();

    for($I = 1;$I < $ArgCount;$I ++)
    {
        $Arg = func_get_arg($I);
        if(!eregi("SORT",$Arg))
        {
            $KeyNameList[] = $Arg;
            $SortRule[]    = '$'.$Arg;
        }
        else
        {
            $SortRule[]    = $Arg;
        }
    }

    // 根据得到的关键字key和值value,将他们的重新组合成数组.
    foreach($ArrayData AS $Key => $Info)
    {
        foreach($KeyNameList AS $KeyName)
        {
            ${$KeyName}[$Key] = $Info[$KeyName];
        }
    }

    // 通过eval进行输出.
    $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
    eval ($EvalString);
    return $ArrayData;
}

//例子
$arr = array(
    array(
        'username'  =>   '小强',
        'age'       =>   '25',
        'nicename'  =>   'xq',
    ),
    array(
        'username'  =>   '小龙',
        'age'       =>   '18',
        'nicename'  =>   'egg',

    ),
    array(
        'username'  =>   '美女',
        'age'       =>   '35',
        'nicename'  =>   'calla',

    ),

);

//分别按照username和age和nicename进行排序。
$temp = sysSortArray($arr,"name","SORT_ASC","type","SORT_DESC",
"size","SORT_ASC","SORT_STRING");

print_r($temp);

?>

使用这个方法主要的核心函数是array_multisort(),大家感兴趣的可以去了解下。这个方法主要是用在未涉及数据库时使用。还有一点就是php有个函数是uasort()自定义比较函数对数组排序。