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

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))

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

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

  1. js数组对象排序详解

    一.js对象遍历输出的时候真的是按照顺序输出吗? 下边就来实践一下: var obj={'3':'ccc',name:'abc',age:23,school:'sdfds',class:'dfd',h ...

  2. 005-Scala数组操作实战详解

    005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...

  3. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  4. sorted()排序详解

    sorted()排序详解     http://wiki.python.org/moin/HowTo/Sorting?highlight=%28howto%29#The_Old_Way_Using_t ...

  5. PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)

    一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...

  6. js数组的sort排序详解

    <body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox" ...

  7. JavaScript中数组Array方法详解

    ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方 ...

  8. PHP数组排序函数array_multisort()函数详解

    这个函数因为用到了,并且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给大家. 原文链接:http://blog.163.com/lgh_2002/blog/static/44017526 ...

  9. PHP数组排序函数array_multisort()函数详解(二)

    array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列 例如array_multisort($a,$b),$a,$b是两个数组,如果排 ...

随机推荐

  1. oracle登录管理员创建数据库和表空间

    登录管理员最高权限账号 cmd输入sqlplus 回车,或者直接打开sqlplus 用户名:sys 密码:sys as sysdba 1.首先,创建(新)用户: create user usernam ...

  2. Python练手例子(11)

    61.打印出杨辉三角形. #python3.7 from sys import stdout if __name__ == '__main__': a = [] for i in range(10): ...

  3. Axure环境安装,组件引入,使用示例

    资源下载: Axure的中文官方下载地址:https://www.axure.com.cn/3510/ Axure汉化包:https://www.axure.com.cn/2616/ Axure元件库 ...

  4. 惊奇!用Java也能实现比特币系统

    最近区块链技术突然爆火,身边做技术的朋友茶余饭后不谈点区块链什么的都被认为是跟不上时代了,为啥会这样了? 这其实跟比特币价格去年的突飞猛进是分不开的,比特币价格从去年初不到一千美金到今年初最高接近两万 ...

  5. Android 音视频开发(五):使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件

    一个音视频文件是由音频和视频组成的,我们可以通过MediaExtractor.MediaMuxer把音频或视频给单独抽取出来,抽取出来的音频和视频能单独播放: 一.MediaExtractor API ...

  6. SDL 开发实战(三):使用 SDL 绘制基本图形

    在上文 SDL 开发实战(二):SDL 2.0 核心 API 解析 我们讲解了SDL最核心的API,并结合Hello World代码了解了SDL渲染画面的基本原理. 本文我们来讲一下,如何使用SDL的 ...

  7. [Swift]LeetCode6. Z字形变换 | ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  8. [Swift]LeetCode665. 非递减数列 | Non-decreasing Array

    Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...

  9. 【Spark篇】---Spark解决数据倾斜问题

    一.前述 数据倾斜问题是大数据中的头号问题,所以解决数据清洗尤为重要,本文只针对几个常见的应用场景做些分析 . 二.具体方法  1.使用Hive ETL预处理数据 方案适用场景: 如果导致数据倾斜的是 ...

  10. 什么样的IT业务适合外包?

    很多公司都应该遇到过这样的问题,什么样的IT业务才适合外包呢? 百度大家都可以百度的到一些信息,比如: 针对这样的推荐答案,是否也需要认真思考一下,我需要外包的业务是什么样的业务?是不是真的适合外包? ...