程序员人生 网站导航

php一维二维数组键排序方法总结

栏目:php教程时间:2013-11-21 21:48:33

在php中数组排序一直是一个老生常谈的问题,下面我们来集中讲一下关于在php中一维数组与二维数组排序的实现程序,各位同学可参考.

功能:对数组进行重新排序.

说明:冒泡排序 (一维数组)(二维数组某个健排序)

两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止

设想被排序的数组R[1..N] 垂直竖立,将每个数据元素看作有重量的气泡,从下往上扫描数组,凡扫描违反原则的轻气泡,就使其向上”漂浮”,如此反复进行,直到最后任何两个气都是轻者在上,重者在下为止,代码如下:

  1. /** 
  2. * 冒泡排序 (一维数组)(二维数组某个健排序) 
  3. * 两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止 
  4.  * 设想被排序的数组R[1..N] 垂直竖立,将每个数据元素看作有重量的气泡,从下往上扫描数组,凡扫描违反原则的轻气泡,就使其向上"漂浮".如此反复进行. 
  5.  * 直到最后任何两个气都是轻者在上,重者在下为止. 
  6.  */ 
  7. function bubble_sort($array,$key=null) { 
  8.         $count = count($array); 
  9.         if($count < 0) { 
  10.             return false; 
  11.         } 
  12.         for($i = 0; $i < $count$i++) { 
  13.             for($j = $count - 1; $j > $i$j--) { 
  14.                 if($key && isset($array[$key])){//二维数组健存在 
  15.                     if($array[$j][$key] < $array[$j - 1][$key]) { 
  16.                         $tmp = $array[$j]; 
  17.                         $array[$j] = $array[$j - 1]; 
  18.                         $array[$j - 1] = $tmp
  19.                     } 
  20.                 }else//一维数组 
  21.                     if($array[$j] < $array[$j - 1]) { 
  22.                         $tmp = $array[$j]; 
  23.                         $array[$j] = $array[$j - 1]; 
  24.                         $array[$j - 1] = $tmp
  25.                     } 
  26.                 } 
  27.             } 
  28.         } 
  29.         return $array
  30.     } 

array_multisort排序使用方法

array_multisort() 对二位数组按照指定键值排序的使用方法,本例中定义了一个名为 $data 的二维数组,然后对它进行排序,方法代码如下:

  1. $data[] = array('volume' => 67, 'edition' => 2);  
  2. $data[] = array('volume' => 86, 'edition' => 1);  
  3. $data[] = array('volume' => 85, 'edition' => 6);  
  4. $data[] = array('volume' => 98, 'edition' => 2);  
  5. $data[] = array('volume' => 86, 'edition' => 6);  
  6. $data[] = array('volume' => 67, 'edition' => 7);  
  7.    
  8. // 取得列的列表  
  9. foreach ($data as $key => $row) {  
  10.     $volume[$key]  = $row['volume'];  
  11.     $edition[$key] = $row['edition'];  
  12. }  
  13.    
  14. // 将数据根据 volume 降序排列,根据 edition 升序排列  
  15. // 把 $data 作为最后一个参数,以通用键排序  
  16. array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);  
  17.    
  18. print_r($data); 
  19.  
  20. /* 
  21. 执行后打印结果如下: 
  22. Array  
  23.  
  24.     [0] => Array  
  25.         (  
  26.             [volume] => 98  
  27.             [edition] => 2  
  28.         )  
  29.     [1] => Array  
  30.         (  
  31.             [volume] => 86  
  32.             [edition] => 1  
  33.         )  
  34.     [2] => Array  
  35.         (  
  36.             [volume] => 86  
  37.             [edition] => 6  
  38.            
  39.     [3] => Array  
  40.         (  
  41.             [volume] => 85  
  42.             [edition] => 6  
  43.         )  
  44.     [4] => Array  
  45.         (  
  46.             [volume] => 67  
  47.             [edition] => 2  
  48.         )  
  49.     [5] => Array  
  50.         (  
  51.             [volume] => 67  
  52.             [edition] => 7  
  53.         )  
  54. ) 
  55. */ 

一维数组排序我们只要使用sort()就可以了,相对应的 asort($arr); 函数是按键值排序,且维持原有的键值关系。

同样原理,rsort(); arsort(); krsort(); 函数除了排序是按降序排列外,其它与sort(); rsort(); ksort(); 相同。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐