PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。

关联(string)键名保持不变,但数字键名会被重新索引。
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。——这句话是理解此函数用法的关键。

第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。

排序顺序标志:
■SORT_ASC - 按照上升顺序排序
■SORT_DESC - 按照下降顺序排序

排序类型标志:
■SORT_REGULAR - 将项目按照通常方法比较
■SORT_NUMERIC - 将项目按照数值比较
■SORT_STRING - 将项目按照字符串比较

每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。

看看两个实际例子:

1、一次对多个数组进行排序:

复制代码 代码如下:
 $num1 = array(3, 5, 4, 3);
 $num2 = array(27, 50, 44, 78);
 array_multisort($num1, SORT_ASC, $num2, SORT_DESC);
 
 print_r($num1);
 print_r($num2);
 //result: Array ( [0] => 3 [1] => 3 [2] => 4 [3] => 5 )
Array ( [0] => 78 [1] => 27 [2] => 44 [3] => 50 )

2、对多维数组(以二位数组为例)进行排序:

复制代码 代码如下:
 $arr = array(
     '0' => array(
         'num1' => 3,
         'num2' => 27
     ),
     '1' => array(
         'num1' => 5,
         'num2' => 50
     ),
     '2' => array(
         'num1' => 4,
         'num2' => 44
     ),
     '3' => array(
         'num1' => 3,
         'num2' => 78
     )
 );
 foreach ( $arr as $key => $row ){
     $num1[$key] = $row ['num1'];
     $num2[$key] = $row ['num2'];
 }
 array_multisort($num1, SORT_ASC, $num2, SORT_DESC, $arr);
 print_r($arr);
 //result:Array([0]=>Array([num1]=>3 [num2]=>78)
[1]=>Array([num1]=>3 [num2]=>27) [2]=>Array([num1]=>4
[num2]=>44) [3]=>Array([num1]=>5 [num2]=>50))

总结:

这里的重点就是,先把要排序的key存到一个一维数组中,然后就可以使用array_multisort()这个函数,将数组按照key进行排序
了,当然,这里的排序你完全可以不适用array_multisort()这个函数,仅仅通过foreach遍历也能达到这个效果,但是既然php开发者
给我们提供了更好的办法,我们就可以省去不必要的麻烦了。

php array_mutisort的更多相关文章

  1. php 二维数组的排序

    写这是之前一直二维数组排名困扰.自己写的好复杂. 正题: array_mutisort 官方帮助文档 <?php// 取得列的列表foreach ($data as $key => $ro ...

  2. php函数式编程

    // 函数式编程 $users = array( array('id' => 1, 'name' => 'abc1', 'age' => 29, '性别' => '男'), a ...

随机推荐

  1. jquery获取设置input值

    $("#input").val("123"),注意val()这个函数$("#input").val("123"),//给 ...

  2. ios开发之--CGRect/CGSize/CGPoint/CGVector/CGAffineTransform/UIEdgeInsets/UIOffset和NSString之间的转换

    仅做记录,一个函数和字符串之间的互相转换 方法如下: UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN N ...

  3. C#,C++Dll文件调用心得

    C#下: 1.新建-->项目-->控制台应用程序:填写各种名称之后项目新建成功:一下为默认生成方式. 2.如下,在Program.cs中添加如下代码: using System;using ...

  4. Gson 解析JSON数据

    {"province":[{"name":"安徽省","city":[{"name":"安 ...

  5. Vmware虚拟机中安装centos,并实现联网

    1 安装所需要的软件 vmware workstation 12 永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N CentOS-7-x86_64-Minimal-1708 2 ...

  6. linux安装yaf(ubuntu教程)

    $PHP_BIN/phpize 这个是什么 其实这个是一个扩展 apt-get install php5-dev 这样电脑会帮你自己配置了,很简单的下面我们就下载扩展包了http://pecl.php ...

  7. PMP 质量管理7张图 很形象

    PMP 质量管理 中的因果图.控制图.流程图.核查表.直方图.帕累托图.散点图

  8. 【BZOJ4563】[Haoi2016]放棋子 错排+高精度

    [BZOJ4563][Haoi2016]放棋子 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍 ...

  9. 160411、实时监控mysql数据库变化

    对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数 ...

  10. Eclipse+ADT+Android SDK 搭建安卓开发环境(版权属于forever-z)

    运行环境 windows 7或者10(64位); 为例eclipse-jee-neon-3-win32-x86_64: ADT-23.0.4 下载地址 安装JDK 这里可以参考关于安装JDK的教程,请 ...