array_multisort二维或多维数组或多个数组的排序实例详解
项目中使用到多维数组的排序,去官网看了下介绍。
php的array_multisort() 函数对多个数组或多维数组进行排序,字符串键名(key)将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。
参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。
官方的介绍可能有点模糊,我们用实例来了解下这个函数。
1、字符串索引和数字索引
$a=array('b','a','c'); $b=array('a'=>1,'b'=>3,'c'=>2); array_multisort($a); /* $a=Array ( [0] => a [1] => b [2] => c ) $b=Array ( [a] => 1 [c] => 2 [b] => 3 ) */
可以看到,两个数组都是按照升序排序的
2、两个数组排序
$a=array('b','a','c'); $b=array('a'=>1,'b'=>3,'c'=>2); array_multisort($a,$b); /* $a=Array ( [0] => a [1] => b [2] => c ) $b=Array ( [b] => 3 [a] => 1 [c] => 2 ) */
$a数组时升序排序(默认),$b数组就是按照a数组的key顺序排序。上面这个例子中,a数组排序后的key顺序是1,0,2,b数组也会按照这个顺序重新排序数组。
3、同值排序
$a=array('a'=>1,'b'=>3,'c'=>3); $b=array('a'=>2,'b'=>3,'c'=>1); array_multisort($a,$b); /* $a=Array ( [a] => 1 [c] => 3 [b] => 3 ) $b=Array ( [a] => 2 [c] => 1 [b] => 3 ) */
这个例子中,a数组升序排序,但是b和c的值是一样的,至于谁排到前面,看数组b,b数组中的c小于b,所以c排到前面。b数组SORT_DESC排序也是同理。
4、多维数组排序
$a=array( array('a'=>'a','b'=>3), array('a'=>'c','b'=>2), array('a'=>'b','b'=>1), ); $k1=array_column($a,'a');//Array ( [0] => a [1] => c [2] => b ) array_multisort($k1,SORT_DESC,$a); /* Array ( [0] => Array ( [a] => c [b] => 2 ) [1] => Array ( [a] => b [b] => 1 ) [2] => Array ( [a] => a [b] => 3 ) ) */
这个例子中,我们将a数组按照a字段降序排序,可以先提取a字段,然后让k1数组降序排序,a数组会按照新的排序顺序重新排序。这样就达到了a数组指定字段排序了。其他字段排序同理。
PS:多维数组默认会以第一个键值进行排序,所以此例子中本可以不用提取a字段的,为了更方便理解就提取了一下。
5、多维数组多字段排序
$a=array( array('a'=>'a','b'=>3,'c'=>12), array('a'=>'c','b'=>2,'c'=>24), array('a'=>'b','b'=>2,'c'=>8), ); $k2=array_column($a,'b');//Array ( [0] => 3 [1] => 2 [2] => 2 ) $k3=array_column($a,'c');//Array ( [0] => 12 [1] => 24 [2] => 8 ) array_multisort($k2,SORT_DESC,$k3,$a); /* Array ( [0] => Array ( [a] => a [b] => 3 [c] => 12 ) [1] => Array ( [a] => b [b] => 2 [c] => 8 ) [2] => Array ( [a] => c [b] => 2 [c] => 24 ) ) */
此例子中,a数组先以b字段降序排序,再以c字段升序排序。和上面的例4一样,先提取b和c字段,先k2降序(SORT_DESC),在k3升序。
有 1 位网友评论:
阿风 4年前(2021-01-07 22:30:45)
array_multisort这个函数不好理解,感谢博主,跟着一步一步看,终于摸透了这个函数~~~^︶^~~~