PHP数组时我们在编程时遇到的最多的数据格式,一维数组好说,sort()、rsort()、ksort()、krsort()等等都可以运用,但是当我们遇到二维数组,想对它进行排序时,是不是有点纠结呢?
下面,来给大家介绍一个很实用的函数:array_multisort(),下面上demo:
$newArr = array( array('a'=>1,'b'=>2), array('a'=>3,'b'=>4), ); // 例如根据a字段的值进行降叙排列,先拿到a字段的值: $orderA = array_column($newArr,'a'); // 进行排序 array_multisort($orderA,SORT_DESC,$newArr); print_r($newArr); //排序结果: a | b ----+------ 3 | 4 1 | 2
不知你有没有get到呢~
当然,上面只是根据一个字段进行排序,如果要对多个字段进行依次排序呢?也可以用这个方法的,下面上代码:
//php 查出来或模拟的数据 $data = array( array('volume' => 67, 'edition' => 2), array('volume' => 86, 'edition' => 1), array('volume' => 85, 'edition' => 6), array('volume' => 98, 'edition' => 2), array('volume' => 86, 'edition' => 6), array('volume' => 67, 'edition' => 7), ); //取出排序字段 $volume = array_column($data,'volume'); $edition = array_column($data,'edition'); //先将数据根据 volume 降序排列,然后根据 edition 降序排列 //把 $data 作为最后一个参数,以通用键排序 //进行排序 array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); print_r($data); //排序结果 volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7
怎么样,看完是不是感觉很强大,其实这个函数还有很多增强型的应用,大家可以自己翻看一下W3C手册。。。
语法:array_multisort(array1,sorting order,sorting type,array2,array3…)
说明:array_multisort() 函数对多个数组或多维数组进行排序。
参数中的数组被当成一个表的列并以行来进行排序 – 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。
第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:
SORT_ASC – 默认,按升序排列。(A-Z)
SORT_DESC – 按降序排列。(Z-A)
随后可以指定排序的类型:
SORT_REGULAR – 默认。将每一项按常规顺序排列。
SORT_NUMERIC – 将每一项按数字顺序排列。
SORT_STRING – 将每一项按字母顺序排列。
没有难的技术,当你弄清它的原理时,你会发现原来如此简单~ 欢迎加群【536501561】讨论