1.   阿里云服务器1888元代金券领取
  2.   本网站所有源码包解压密码:www.youhutong.com
登录  帮助问答

php 二维数组排序、利用array_multisort()函数,根据某个字段对二维数组进行排序

小川 技术文章
郑重声明:
  本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,否则后果请用户自负,下载后请24小时内删除。 本站所有内容均不能保证其完整性,不提供任何技术支持,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用。

php利用array_multisort()函数,根据某个字段对二维数组进行排序

    当我们需要对数据进行排序,但又不好修改mysql查询条件的时候。我们可以利用array_multisort()来对多维数据进行排序!


首先我们先看看官方上的说明:

语法:

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()函数来进行排序!

<?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、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意
( 0 )个小伙伴在吐槽
    登录帐号  如果已经登录请刷新! 发表我的评论
    表情