PHP array_multisort()函数超详细理解

PHP array_multisort()函数超详细理解

项目中用到这个函数了 ,起初对这个函数一直是懵逼状态,文档都看的朦朦胧胧的 

网上无意间看到这篇文章 ,写的超级详细,收藏了 。

当然要先放原地址:https://www.cnblogs.com/WuNaiHuaLuo/p/5794669.html

 

<!———-正文begin————–>

 

这个函数因为用到了,并且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给大家。

 

  原文链接:http://blog.163.com/lgh_2002/blog/static/4401752620115242345435/

 

array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列——有点拗口,真的,并且我要只是这样说你一定也不明白。先举个例子:

 

例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元素被排到了第一位,那么$b的第三个元素不管他在$b中的大小都会排在第一位。看看下边的程序运行结果:

复制代码
<?php 
$a =array(100,80,50,10,0); $b = array("c","f","q","e","z"); array_multisort($a,$b); var_dump($a); var_dump($b); ?>
复制代码

 

 

运行结果:
array(5) { [0]=> int(0) [1]=> int(10) [2]=> int(50) [3]=> int(80) [4]=> int(100) }
array(5) { [0]=> string(1) “z” [1]=> string(1) “e” [2]=> string(1) “q” [3]=> string(1) “f” [4]=> string(1) “c” }

 

很显然本来是数组b第五个元素的z被排到了第一位!

 

其实说明白了就是,array_multisort()先把第一个数组按照键值的大小排序,然后其它数组都按照第一个数组的调整策略进行调整——第三个元素放到第一位,第二个元素放到第二位……——其实这个多维数组排序算法的最基本体现!

 

不过需要注意的是:两个数组的元素个数必须相同,不然就会出现一个警告信息:
Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in ……

 

好了,希望上边的大家也能用上,咱们还是说主要的吧:array_multisort()对多维数组进行排序,这个功能将来做项目的时候是非常有用的!

 

首先我们看看对多维数组的每一元素[数组]进行排序的操作方法,很简单,但是有几个参数需要说明一下,如果您对sql有所了解一看估计就明白了:

 

复制代码
<?php
//让我们来构造一个多维数组 $a=array(100,2,4,7,7); $b=array('ab','ac','ad','ag','ap'); $ab = array($a,$b); //开始排序 array_multisort($ab[0],SORT_NUMERIC,SORT_DESC,$ab[1],SORT_STRING,SORT_ASC); print_r($ab); ?>
复制代码

 

 

说明一下:首先我们用SORT_NUMERIC来声明对$ab[0]用数字类型排序,用SORT_DESC
声明顺序是逆序(从大到小),然后我们对$ab[1]用字符串类型排序,顺序是升序(顺序)
最后数组$ab的排序结果是两者的结合,先按$ab[0]的逆序,如果$ab[0]中存在大小相同的数值则按照$ab[1]的顺序排列,输出结果如下:

 

Array (
[0] => Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 )
[1] => Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac )
)
是不是很像在数据库中用order by?其实真的差不多!

 

现在我们再看一个更加贴近实际应用的例子:

 

复制代码
<?php 
$array[] = array("age"=>20,"name"=>"li"); $array[] = array("age"=>21,"name"=>"ai"); $array[] = array("age"=>20,"name"=>"ci"); $array[] = array("age"=>22,"name"=>"di"); foreach ($array as $key=>$value){ $age[$key] = $value['age']; $name[$key] = $value['name']; } array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array); print_r($array); ?>
复制代码

 

 

这个例子的$array[]数组,是按照数据库中读出的记录来构造的,我们现在对他们按照年龄从大到小的顺序排列,如果年龄相同就按照名字的顺序排序。这样的排序才是我们将来会经常用的到的,
因为array_multisort()需要的排序参数必须是一个列,所以我们用foreach把这个数组的年龄和姓名读出来,之后呢?
就像上边的例子一样,进行排序,最后一个参数$array想必大家也看见了,是的这里需要声明对哪个数组进行排序,因为我们前边两个参数在形式上已经和需要排序的PHP数组没有关系了,虽然其实他们就是$array中的数据——我们从$array中抽取的列——排序当然是需要列,还没见过用行数据进行排序的呢!

 

输出结果如下——正如我们所想的:

Array (
[0] => Array ( [age] => 22 [name] => di )
[1] => Array ( [age] => 21 [name] => ai )
[2] => Array ( [age] => 20 [name] => ci )
[3] => Array ( [age] => 20 [name] => li )
)

 

 

看到了吧,其实也很简单,就是那几个需要大写的参数有点烦人而已!虽说也有点难以理解,但是理解了就好了,将来很有用的哦!

<!———-正文end————-

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/113065.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 机房收费系统——退卡

    机房收费系统——退卡机房收费系统——退卡

  • MATLAB中canny算子边缘检测「建议收藏」

    MATLAB中canny算子边缘检测「建议收藏」今天来介绍一下关于canny算子做边缘检测的过程:Canny的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:好的检测-算法能够尽可能多地标识出图像中的实际边缘。好的定位-标识出的边缘要与实际图像中的实际边缘尽可能接近。最小响应-图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。1、首先打开MATLAB软件,在其主界面中写入下列代码:I=imre…

  • jdbc fetchsize_Sharding-JDBC

    jdbc fetchsize_Sharding-JDBCDBUtilscommons-dbutils是Apache组织提供的一个开源JDBC工具类库,封装了针对于数据库的增删改查操作APIQueryRunnerResulSetHandlerDbutils插入举例Connection conn = null; try { QueryRunner runner = new QueryRunner(); conn = JBBCUtils.getConnections3();

  • java 截位法保留小数_【数量关系速算技巧】泡泡截位法专题

    java 截位法保留小数_【数量关系速算技巧】泡泡截位法专题资料分析都要找技巧,进行分析之类的,但是如果你对计算有所技巧的话,那么你的计算就相对简单,也会比别人快些,在节省做题时间以及做题时间的同时,还能够提高正确率。截位法使用范围:除了加减法,其他的运算都可以使用截位法。【截位法原理】如果我要把分子提高一部分,分母也要提高相应的部分,这样子得到的答案才不会有偏差,简言之就是同增同减。除法:【分子除以分母】12345/54321【用计算器得结果227】变…

  • 电脑搭建代理服务器_windows7代理服务器设置

    电脑搭建代理服务器_windows7代理服务器设置完成即可使用(服务器IP+设置的代理端口)连接代理服务器进行访问上网

    2022年10月24日
  • roc曲线的意义_【科研助手】ROC曲线在医学诊断类稿件中的应用「建议收藏」

    roc曲线的意义_【科研助手】ROC曲线在医学诊断类稿件中的应用「建议收藏」ROC曲线,即受试者工作特征曲线(receiveroperatingcharacteristiccurve),是以灵敏度为纵坐标,1-特异度为横坐标绘制而成的曲线,其在临床医学诊断类稿件中受到人们的广泛关注且应用逐渐深入。而稿件中的ROC曲线应用是否合理及数据逻辑能否行得通,还需认真分析。今天,小编就跟大家聊一聊ROC曲线在医学诊断类稿件中的应用。传统的诊断试验评价方法要求将试验结…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号