二维数组的排序

来源:互联网 发布:怎么做一名淘宝客 编辑:程序博客网 时间:2024/05/08 02:36
在php中我们有个专门的多维数组排序函数:

array_multisort(array1,sorting order, sorting type,array2,array3..)//是对多个数组或多维数组进行排序的函数

array1必需。规定输入的数组。sorting order可选。规定排列顺序。可能的值是 SORT_ASC 和 SORT_DESC。sorting type可选。规定排序类型。可能的值是SORT_REGULAR、SORT_NUMERIC和SORT_STRING。array2可选。规定输入的数组。array3可选。规定输入的数组。

第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。

排序顺序标志: 
■SORT_ASC - 按照上升顺序排序(a-z)
■SORT_DESC - 按照下降顺序排序(z-a)

排序类型标志: 
■SORT_REGULAR - 将项目按照通常方法比较 
■SORT_NUMERIC - 将项目按照数值比较 
■SORT_STRING - 将项目按照字符串比较

每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。

<?phpfunction my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC ){ if(is_array($arrays)){ foreach ($arrays as $array){ if(is_array($array)){ $key_arrays[] = $array[$sort_key]; }else{ return false; } } }else{ return false; }array_multisort($key_arrays,$sort_order,$sort_type,$arrays); return $arrays; }$person =  array(array('id'=>1,'name'=>'fj','weight'=>100,'height'=>180),array('id'=>2,'name'=>'tom','weight'=>53,'height'=>150),array('id'=>3,'name'=>'jerry','weight'=>120,'height'=>156),array('id'=>4,'name'=>'bill','weight'=>110,'height'=>190),array('id'=>5,'name'=>'linken','weight'=>80,'height'=>200),array('id'=>6,'name'=>'madana','weight'=>95,'height'=>110),array('id'=>7,'name'=>'jordan','weight'=>70,'height'=>170));var_dump($person);$person = my_sort($person,'name',SORT_ASC,SORT_STRING);var_dump($person);$person = my_sort($person,'weight');var_dump($person);?>


也可以这样简单的使用:

$users = array(    array('name' => 'tom', 'age' => 20)    , array('name' => 'anny', 'age' => 18)    , array('name' => 'jack', 'age' => 22));  希望能按照age从小到大进行排序。笔者整理了两个方法出来,分享给大家。 1、使用array_multisort 使用这个方法,会比较麻烦些,要将age提取出来存储到一维数组里,然后按照age升序排列。具体代码如下: 代码如下:$ages = array();foreach ($users as $user) {    $ages[] = $user['age'];} array_multisort($ages, SORT_ASC, $users);   执行后,$users就是排序好的数组了,可以打印出来看看。如果需要先按年龄升序排列,再按照名称升序排列,方法同上,就是多提取一个名称数组出来,最后的排序方法这样调用: 代码如下:array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);  2、使用usort 使用这个方法最大的好处就是可以自定义一些比较复杂的排序方法。例如按照名称的长度降序排列: 代码如下:usort($users, function($a, $b) {            $al = strlen($a['name']);            $bl = strlen($b['name']);            if ($al == $bl)                return 0;            return ($al > $bl) ? -1 : 1;        });  这里使用了匿名函数,如果有需要也可以单独提取出来。其中$a, $b可以理解为$users数组下的元素,可以直接索引name值,并计算长度,而后比较长度就可以了。

另一方法:

function arr_sort($arr,$key ,$order="DESC"){    if(count($arr)<=1)    {        return false;    }    $array = $tmp = array();    foreach($arr as $k=>$v)    {           $array[$k] = $v[$key];    }    if($order == 'DESC')    {        arsort($array);    }    else    {        asort($array);    }    foreach($array as $k1=>$v1)    {        $tmp[$k1] = $arr[$k1];    }    return $tmp;}$users = array(    array('name' => 'tom', 'age' => 20),     array('name' => 'anny', 'age' => 18),     array('name' => 'jack', 'age' => 22)); echo '<pre>';var_dump(arr_sort($users,'age','asc'));


0 0
原创粉丝点击