当前位置:首页 > PHP教程 > php数组 > 列表

php 二维数组排序实现程序

发布:smiling 来源: PHP粉丝网  添加日期:2014-07-28 10:57:30 浏览: 评论:0 

在php中对二维数组排序我们可以直接使用array_multisort()函数即可实现,同时我也收藏了一些自定对二维数组排序代码大家可参考.

先来看array_multisort()函数,代码如下:

  1. <?php 
  2. $ar = array
  3.        array("10", 11, 100, 100, "a"), 
  4.        array( 1, 2, "2", 3, 1) 
  5.      ); 
  6. array_multisort($ar[0], SORT_ASC, SORT_STRING, 
  7.                $ar[1], SORT_NUMERIC, SORT_DESC); 
  8. var_dump($ar); 
  9. ?> 

本例中在排序后,第一个数组将变成 "10",100,100,11,"a"(被当作字符串以升序排列),第二个数组将包含 1, 3, "2", 2, 1(被当作数字以降序排列),代码如下:

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

上面的用现成的函数感觉不是很方便,下面我来推荐一个用户自定义的函数,代码如下:

  1. function array_sort($arr,$keys,$type='asc'){  
  2.  $keysvalue = $new_array = array(); 
  3.  foreach ($arr as $k=>$v){ 
  4.   $keysvalue[$k] = $v[$keys]; 
  5.  } 
  6.  if($type == 'asc'){ 
  7.   asort($keysvalue); 
  8.  }else
  9.   arsort($keysvalue); 
  10.  } 
  11.  reset($keysvalue); 
  12.  foreach ($keysvalue as $k=>$v){ 
  13.   $new_array[$k] = $arr[$k]; 
  14.  } 
  15.  return $new_array;  

测试(它可以对二维数组按照指定的键值进行排序,也可以指定升序或降序排序法(默认为升序),用法示例:

  1. $array = array
  2.  array('name'=>'手机','brand'=>'诺基亚','price'=>1050), 
  3.  array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300), 
  4.  array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100), 
  5.  array('name'=>'跑步机','brand'=>'三和松石','price'=>4900), 
  6.  array('name'=>'手表','brand'=>'卡西欧','price'=>960), 
  7.  array('name'=>'液晶电视','brand'=>'索尼','price'=>6299), 
  8.  array('name'=>'激光打印机','brand'=>'惠普','price'=>1200) 
  9. ); 
  10. $ShoppingList = array_sort($array,'price'); 
  11. print_r($ShoppingList); 

冒泡法,代码如下:

  1. function arraysort($data$order = 'asc') { 
  2. //asc升序 desc降序 
  3. $temp = array (); 
  4. $count = count ( $data ); 
  5. if ($count <= 0) 
  6. return false; //传入的数据不正确 
  7. if ($order == 'asc') { 
  8. for($i = 0; $i < $count$i ++) { 
  9. for($j = $count - 1; $j > $i$j --) { 
  10. if ($data [$j] < $data [$j - 1]) { 
  11. //交换两个数据的位置 
  12. $temp = $data [$j]; 
  13. $data [$j] = $data [$j - 1]; 
  14. $data [$j - 1] = $temp
  15. else { 
  16. for($i = 0; $i < $count$i ++) { 
  17. for($j = $count - 1; $j > $i$j --) { 
  18. if ($data [$j] > $data [$j - 1]) { 
  19. $temp = $data [$j]; 
  20. $data [$j] = $data [$j - 1]; 
  21. $data [$j - 1] = $temp
  22.  
  23. return $data
  24.  
  25. $data = array (7, 5, 3, 8, 9, 1, 5, 3, 1, 24, 3, 87, 0, 33, 1, 12, 34, 54, 66, 32 ); 
  26. var_dump ( arraysort ( $data ) ); //升序 
  27. echo ('<br>'); 
  28. var_dump ( arraysort ( $data ,'desc') );//降序 

Tags: php 二维数组排序 实现程序

分享到: