PHP数组array_multisort排序详解

今天特意再看了下官网的介绍,对它的多个数组的排序还是每台理解,找了些资料深入理解了下,在此总结下。

PHP中array_multisort函数对多个数组或多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引。 
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。——这句话是理解此函数用法的关键。

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

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

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

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

参数数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。注意:作为参数的数组元素个数应保持一致,否则会报错。

先看一个对多个数组进行排序的例子。

<?php

$array1 = array(‘one‘=>‘10‘,‘two‘=>‘20‘,‘three‘=>‘20‘,‘four‘=>10);
$array2 = array(‘one‘=>‘10‘,‘two‘=>‘30‘,‘three‘=>‘20‘,‘four‘=>‘1‘);
$array3 = array(‘one‘=>‘C‘,‘two‘=>‘A‘,‘three‘=>‘B‘,‘four‘=>‘F‘);

array_multisort($array1,$array2,$array3);
print_r($array1);//Array ( [four] => 10 [one] => 10 [three] => 20 [two] => 20 )
print_r($array2);//Array ( [four] => 1 [one] => 10 [three] => 20 [two] => 30 )
print_r($array3);//Array ( [four] => F [one] => C [three] => B [two] => A )

在上面的例子中,首先对第一个参数数组进行排序(默认所有数组升序排序),我们可以看出第一个数组中存在相同的值(键名‘one’和‘four’的键值相同,键名‘two’和‘three’的键值相同),所以在排序第一个数组的相同值时就按照下一个输入数组中相应值的大小来排序(第二个数组‘four’的值小于‘one’的值,因此four的值排在one的前面),依此类推。

在看一个,改变排序顺序的例子。

$array1 = array(‘one‘=>‘10‘,‘two‘=>‘20‘,‘three‘=>‘20‘,‘four‘=>10);
$array2 = array(‘one‘=>‘10‘,‘two‘=>‘30‘,‘three‘=>‘20‘,‘four‘=>‘1‘);
$array3 = array(‘one‘=>‘C‘,‘two‘=>‘A‘,‘three‘=>‘B‘,‘four‘=>‘F‘);

array_multisort($array1,SORT_DESC,$array2,SORT_ASC,$array3);
print_r($array1);//Array ( [three] => 20 [two] => 20 [four] => 10 [one] => 10 )
print_r($array2);//Array ( [three] => 20 [two] => 30 [four] => 1 [one] => 10 )
print_r($array3);//Array ( [three] => B [two] => A [four] => F [one] => C )

在这个例子中,第一个数组降序排序,碰到相同的值,按照第二个数组升序值进行排序。

注意:如果要是排序数组都是关联数组,则保留原有key名,若存在索引数组,则会按顺序重新建立索引。

$array1 = array(‘one‘=>‘10‘,2=>‘20‘,3=>‘20‘,4=>10);
$array2 = array(‘one‘=>‘10‘,‘2‘=>‘30‘,‘3‘=>‘20‘,‘four‘=>‘1‘);
$array3 = array(‘one‘=>‘C‘,‘2‘=>‘A‘,‘3‘=>‘B‘,‘four‘=>‘F‘);    

array_multisort($array1,$array2,$array3);    

print_r($array1); //Array ( [0] => 10 [one] => 10 [1] => 20 [2] => 20 )
print_r($array2); //Array ( [four] => 1 [one] => 10 [0] => 20 [1] => 30 )
print_r($array3); //Array ( [four] => F [one] => C [0] => B [1] => A )

多维数组排序。

我们通常有一些多维数组需要排序:

$guys = array(
    array(‘name‘=>‘jake‘, ‘score‘=>80, ‘grade‘ =>‘A‘),
    array(‘name‘=>‘jina‘, ‘score‘=>70, ‘grade‘=>‘A‘),
    array(‘name‘=>‘john‘, ‘score‘=>70, ‘grade‘ =>‘A‘),
    array(‘name‘=>‘ben‘, ‘score‘=>20, ‘grade‘=>‘B‘)
);
//例如我们想按成绩倒序排列,如果成绩相同就按名字的升序排列。
//这时我们就需要根据$guys的顺序多弄两个数组出来:
$scores = array(80,70,70,20);
$names = array(‘jake‘,‘jina‘,‘john‘,‘ben‘);
//然后
array_multisort($scores, SORT_DESC, $names, $guys);

foreach($guys as $v){
    print_r($v);
    echo "<br/>";
}
/*
Array ( [name] => jake [score] => 80 [grade] => A )
Array ( [name] => jina [score] => 70 [grade] => A )
Array ( [name] => john [score] => 70 [grade] => A )
Array ( [name] => ben [score] => 20 [grade] => B )
*/

再来个一次对多个数组进行排序:

$num1 = array(3, 5, 4, 3);
$num2 = array(27, 50, 44, 78);
array_multisort($num1, SORT_ASC, $num2, SORT_DESC);

print_r($num1);
print_r($num2);
//result: Array ( [0] => 3 [1] => 3 [2] => 4 [3] => 5 ) Array ( [0] => 78 [1] => 27 [2] => 44 [3] => 50 )

对多维数组(以二位数组为例)进行排序:

$arr = array(
    ‘0‘ => array(
        ‘num1‘ => 3,
        ‘num2‘ => 27
    ),

    ‘1‘ => array(
        ‘num1‘ => 5,
        ‘num2‘ => 50
    ),

    ‘2‘ => array(
        ‘num1‘ => 4,
        ‘num2‘ => 44
    ),

    ‘3‘ => array(
        ‘num1‘ => 3,
        ‘num2‘ => 78
    )
);

foreach ( $arr as $key => $row ){
    $num1[$key] = $row [‘num1‘];
    $num2[$key] = $row [‘num2‘];
}

array_multisort($num1, SORT_ASC, $num2, SORT_DESC, $arr);

print_r($arr);
//result:Array([0]=>Array([num1]=>3 [num2]=>78) [1]=>Array([num1]=>3 [num2]=>27) [2]=>Array([num1]=>4 [num2]=>44) [3]=>Array([num1]=>5 [num2]=>50))

理解有限.......可能有描述不正之处

时间: 2024-10-25 17:27:39

PHP数组array_multisort排序详解的相关文章

php中二维数组排序问题方法详解

合肥开源IT教育分享一篇<php中二维数组排序问题方法详解>的文章希望能够帮助在学习php的新手们,如果还有什么不懂的问题 可以关注我们的官方网站:www.kyitjy.com  豪华的名师团队,多位技术专家授课,多位核心研发工程师研发授课. PHP中二维数组排序,可以使用PHP内置函数uasort() 示例一: 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 回调函数如下:注意回调函数的返回值是负数或者是false的时候,表示回调函数的第一个参数在前,第二个参数在后排列 $per

后缀数组(suffix array)详解

后缀数组(suffix array)详解 转载请注明:http://www.cnblogs.com/acmer-jsb/p/3988683.html 一.What  Is  Suffix Array? 用我的理解,后缀数组是一种功能强大的字符串处理工具,堪称字符串处理神奇,尤其是在字符串匹配方面更是有着出色的处理能力. 其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也不太逊色,并且,它比后缀树所占用的空间小很多.可以说,在信息学竞赛中后缀

Excel2010排序详解

我倒是要看看这一天一篇的发表频率,能让我自己坚持多长时间. 今天跟大家分享的主要内容是在Excel中的筛选功能,这个功能应该是谁都用过,把一列数据按照从大到小,从小到大的,有意义或无意义的排列着.这个方法大家都会,用着几个按钮就都能搞定. 稍微复杂点的操作呢,比如按多关键字排序,按照单元格颜色排序,局部排序,按行横向排序,excel是如何完成的呢?耐心往下看. 1 按照多关键字排序.先看数据源,先按单据编号排序,在单据编号相同的情况下,按照商品编号排序,如果商品编号再相同,就按单据日期排序.这个

005-Scala数组操作实战详解

005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer(长度可变) 数组的进阶操作 多维数组 常用数组使用方法分析 1.可通过yield产生新的数组并赋值给变量 2.for循环中也同时可以添加if过滤器来过滤数据再产生新的数据 3.c.filter(_%2==0).Map(2*_)生产环境经常会使用的表达方法(重点) 4.数组和缓冲数组都是可以直接调用其

极角排序详解:

极角排序详解 名词释义: 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向).对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标 四种极角排序代码详解: 1 struct point 2 { 3 double x,y; 4 }; 5 6 double cross(double x1,double y1,double x2,dou

python的sorted排序详解

排序,在编程中经常遇到的算法,我也在几篇文章中介绍了一些关于排序的算法.有的高级语言内置了一些排序函数.本文讲述Python在这方面的工作.供使用python的程序员们参考,也让没有使用python的朋友了解python.领略一番"生命有限,请用Python"的含义. 内置函数sorted()/list.sort()的使用 简单应用 python对list有一个内置函数:sorted(),专门用于排序.举例: >>> a=[5,3,6,1,9,2] >>&

Linux Shell数组常用操作详解

Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) 1 declare -a array 2 array=(1 2 3 4 5) 数组用小括号括起,数组元素之间用空格分开 2显示数组长度: [@tc_132_227 dm_pid_day]$ echo ${#array[@]} 5 [@tc_132_227 dm_pid_day]$ echo ${#array[*]} 5 命令: ${#数组名[@或*]} 获取数组长度,若数组无

js数组的sort排序详解

<body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox"> 1.简单数组简单排序 <script type="text/javascript"> var arrSimple=new Array(1,8,7,6); arrSimple.sort(); document.writeln(arrSimple.join()); <

js数组的sort排序详解(转载)

<body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox"> 1.简单数组简单排序 <script type="text/javascript"> var arrSimple=new Array(1,8,7,6); arrSimple.sort(); document.writeln(arrSimple.join()); <