二维数组KEY下标的多重排序: array_multisort()

    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 – 将每一项按字母顺序排列。


技苑
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • © 2016-2024 技苑 | PHP是最好的语言 版权所有 ICP证:鄂ICP备15021999号-4
  • 联系邮箱:master@pengxb.com