php利用array_multisort()函数,根据某个字段对二维数组进行排序
当我们需要对数据进行排序,但又不好修改mysql查询条件的时候。我们可以利用array_multisort()来对多维数据进行排序!
首先我们先看看官方上的说明:
语法:
1 | array_multisort (array1,sorting order, sorting type,array2,array3..) |
是对多个数组或多维数组进行排序的函数。
array1 | 必需。规定输入的数组。 |
sorting order | 可选。规定排列顺序。可能的值: SORT_ASC - 默认。按升序排列 (A-Z)。 SORT_DESC - 按降序排列 (Z-A)。 |
sorting type | 可选。规定排序类型。可能的值: SORT_REGULAR - 默认。把每一项按常规顺序排列(Standard ASCII,不改变类型)。 SORT_NUMERIC - 把每一项作为数字来处理。 SORT_STRING - 把每一项作为字符串来处理。 SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。 SORT_NATURAL - 把每一项作为字符串来处理,使用类似 natsort() 的自然排序。 SORT_FLAG_CASE - 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写。 |
array2 | 可选。规定输入的数组。 |
array3 | 可选。规定输入的数组。 |
参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。
第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:
SORT_ASC - 默认,按升序排列。(A-Z)
SORT_DESC - 按降序排列。(Z-A)
随后可以指定排序的类型:
SORT_REGULAR - 默认。将每一项按常规顺序排列。
SORT_NUMERIC - 将每一项按数字顺序排列。
SORT_STRING - 将每一项按字母顺序排列
【案例】:
我们从数据库中查询出数据,时间是日期格式存储的。怎么利用array_multisort()函数来进行排序!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php // +------------------------------------------------------------------------------------------ // | 利用array_multisort,根据字段对二维数组进行排序 Author:xiaochuan 28126649@qq.com // +------------------------------------------------------------------------------------------ header( "Content-Type:text/html;charset=utf-8" ); # 比如下面这个数组是我们从数据库中查询出来的 $data = array ( array ( 'id' => 1 , 'name' => '用户1' , 'date' => '2016-10-16 10:00:00' ), array ( 'id' => 2 , 'name' => '用户2' , 'date' => '2016-10-11 10:00:00' ), array ( 'id' => 3 , 'name' => '用户3' , 'date' => '2016-10-05 10:00:00' ), array ( 'id' => 4 , 'name' => '用户4' , 'date' => '2016-10-05 10:00:00' ), array ( 'id' => 5 , 'name' => '用户5' , 'date' => '2016-10-23 10:00:00' ) ); # 我们转成时间戳。方便后面比较(如果查出已经是那就不用转换了) foreach ( $data as $k => $v ){ $data [ $k ][ 'time' ] = strtotime ( $v [ 'date' ]); } # 把需要根据排序字段的值,放入一个数组中 foreach ( $data as $k => $v ){ $id [ $k ] = $v [ 'id' ]; $time [ $k ] = $v [ 'time' ]; } # 按时间降序排序(time字段) //array_multisort($time,SORT_NUMERIC,SORT_DESC,$data); # 按时间降序排序(time字段) 再按ID降序排序 array_multisort ( $time ,SORT_NUMERIC,SORT_DESC, $id ,SORT_NUMERIC,SORT_DESC, $data ); echo '<pre>' ; print_r( $data ); echo '</pre>' ; ?> |
运行打印出如下数据:
Array ( [0] => Array ( [id] => 5 [name] => 用户5 [date] => 2016-10-23 10:00:00 [time] => 1477188000 ) [1] => Array ( [id] => 1 [name] => 用户1 [date] => 2016-10-16 10:00:00 [time] => 1476583200 ) [2] => Array ( [id] => 2 [name] => 用户2 [date] => 2016-10-11 10:00:00 [time] => 1476151200 ) [3] => Array ( [id] => 4 [name] => 用户4 [date] => 2016-10-05 10:00:00 [time] => 1475632800 ) [4] => Array ( [id] => 3 [name] => 用户3 [date] => 2016-10-05 10:00:00 [time] => 1475632800 ) )
转载请注明来源地址:小川编程 » https://www.youhutong.com/index.php/article/index/90.html
1、本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,下载后请24小时内删除。
2、本站所有内容均不能保证其完整性,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用
3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。
4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意