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】讨论