最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php数组排序之多维数组与一维数组

    我们知道在php数组中分为多维数组与一维数组,我们下面来分别讲述一下php多维数组与一维数组排序原理与实现方法吧。

    一维数组

    第一组:sort 和 rsort,按照PHP数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引,看一下例程,代码如下:

    1. <?php 
    2. $a = array("a"=>1,2); 
    3. sort($a); 
    4. var_dump($a); 
    5.  
    6. rsort($a); 
    7. var_dump($a); 
    8. ?>  

    看一下第一个输出结果,第一个输出:

    1. array(2) { 
    2.   [0]=> 
    3.   int(1) 
    4.   [1]=> 
    5.   int(2) 

    第二个输出:

    1. array(2) { 
    2.   [0]=> 
    3.   int(5) 
    4.   [1]=> 
    5.   int(4) 

    发现没有我们原来定义的索引a哪里去了?哪里去了?可以肯定的说是被他们无情的删除了,你要是对原来的索引关系并不在意的话,可以使用他们!

    第二组函数:asort 和 arsort,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort 和 rsort 分别用这两个函数替换一下,看运行结果代码如下:

    1. array(2) { 
    2.   ["a"]=> 
    3.   int(1) 
    4.   [0]=> 
    5.   int(2) 
    6. array(2) { 
    7.   [0]=> 
    8.   int(2) 
    9.   ["a"]=> 
    10.   int(1) 

    这个一看就明白的,不用说了吧!

    第三组PHP数组排序函数:krsort 和 ksort 这两个不同于以上两组,这两函数是对键名进行排序的,大家可以把上例的函数替换成这两个,看看具体运行结果,这里也不说了,不然这个文章写的就太长了,怕有些兄弟没有耐心看到本文的重点,虽然重点就在下边!

    通过自定义函数对PHP数组进行排序,有三个函数分别是:

    uasort 通过自定义函数对PHP数组的键值进行排序,并且保留原来的索引关系。

    uksort 通过自定义函数对PHP数组的键名进行排序,并且保留原来的索引关系。

    usort通过自定义函数对PHP数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。

    这个地方当然需要一个例子,代码如下:

    1. <!–p 
    2. //首先顶一个函数,这个函数需要接受两个参数,并且返回值是一定的 
    3. //第一个参数等于第二个参数的时候返回0,小于的时候返回-1,大于返回1 
    4.  
    5. function cmp($a,$b){ 
    6.  $a+=1; 
    7.  $b+=3;//改变这些值之后进行比较 
    8.  
    9.  if($a==$breturn 0; 
    10.  return ($a&lt;$b)?-1:1; 
    11.  
    12. $a =array(1,4,3,5); 
    13. uasort($a,'cmp'); 
    14. var_dump($a); 
    15. –>  
    16. //输出结果: 
    17. array(4) { 
    18.   [0]=> 
    19.   int(1) 
    20.   [3]=> 
    21.   int(5) 
    22.   [1]=> 
    23.   int(4) 
    24.   [2]=> 
    25.   int(3) 

    多维数组的排序

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

    1. <?php  
    2. $a =array(100,80,50,10,0); 
    3. $b = array("c","f","q","e","z"); 
    4. array_multisort($a,$b); 
    5. var_dump($a); 
    6. var_dump($b); 
    7. ?>  
    8. //运行结果: 
    9. array(5) { [0]=> int(0) [1]=> int(10) [2]=> int(50) [3]=> int(80) [4]=> int(100) } 
    10. 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有所了解一看估计就明白了,代码如下:

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

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

    1. Array ( 
    2. [0] => Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 ) 
    3. [1] => Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac ) 

    是不是很像在数据库中用order by?其实真的差不多!现在我们再看一个更加贴近实际应用的例子,代码如下:

    1. <?php  
    2. $array[] = array("age"=>20,"name"=>"li"); 
    3. $array[] = array("age"=>21,"name"=>"ai"); 
    4. $array[] = array("age"=>20,"name"=>"ci"); 
    5. $array[] = array("age"=>22,"name"=>"di"); 
    6.  
    7. foreach ($array as $key=>$value){ 
    8.  $age[$key] = $value['age']; 
    9.  $name[$key] = $value['name']; 
    10.  
    11. array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array); 
    12. print_r($array); 
    13. ?> 

    这个例子的$array[]数组,是按照数据库中读出的记录来构造的,我们现在对他们按照年龄从大到小的顺序排列,如果年龄相同就按照名字的顺序排序,这样的排序才是我们将来会经常用的到的,因为array_multisort()需要的排序参数必须是一个列,所以我们用foreach把这个数组的年龄和姓名读出来,之后呢?

    就像上边的例子一样,进行排序,最后一个参数$array想必大家也看见了,是的这里需要声明对哪个数组进行排序,因为我们前边两个参数在形式上已经和需要排序的PHP数组没有关系了,虽然其实他们就是$array中的数据——我们从$array中抽取的列——排序当然是需要列,还没见过用行数据进行排序的呢!

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

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

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

    附录:排序顺序标志:

    SORT_ASC – 按照上升顺序排序

    SORT_DESC – 按照下降顺序排序

    排序类型标志:

    SORT_REGULAR – 将项目按照通常方法比较

    SORT_NUMERIC – 将项目按照数值比较

    SORT_STRING – 将项目按照字符串比较

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php数组排序之多维数组与一维数组

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级