网站地图    收藏   

主页 > php专栏 > php数组查询 >

PHP二维数组排序问题详解(数组键值排序) - php数组

来源:自学PHP网    时间:2014-11-25 21:17 作者: 阅读:

[导读] 根据某个键值对二维数组进行排序是个常见问题,这里总结一个函数,可同时对两个键值分别排序,当然想要更多的话就自行解决吧 但是如果需要排序的数组是一个二维数组,需要按照数组的...

PHP二维数组排序问题详解(数组键值排序)

根据某个键值对二维数组进行排序是个常见问题,这里总结一个函数,可同时对两个键值分别排序,当然想要更多的话就自行解决吧.

但是如果需要排序的数组是一个二维数组,需要按照数组的键值排序,如下面这个二维数组,需要按照sort键名来排序,那么array_multisort() 就无法直接实现了.

实例一,代码如下:

  1. $arr = array
  2. array
  3. 'sort' => 3, 
  4. 'a' => 'a'
  5. 'b' => 'b' 
  6. ), 
  7. array
  8. 'sort' => 5, 
  9. 'a' => 'a'
  10. 'b' => 'b' 
  11. ), 
  12. array
  13. 'sort' => 1, 
  14. 'a' => 'a'
  15. 'b' => 'b' 
  16. ); 

这样array_multisort()不不能生效了,我们可以对函数进行升级一下,根据指定键值进行排序,代码如下:

  1. function array_sort($arr,$key1,$sort1='asc',$key2='',$sort2='asc'){ 
  2.     if (!is_array($arr)){ 
  3.         return $arr
  4.     } 
  5.     foreach($arr AS $key => $row){ 
  6.         $temp[$key] = $row[$key1]; 
  7.     } 
  8.     $sort1 = $sort1 == 'asc' ? SORT_ASC : SORT_DESC; 
  9.     if(!$key2){ 
  10.         array_multisort($temp$sort1,$arr); 
  11.     } else { 
  12.         foreach($arr AS $key => $row){ 
  13.             $temp2[$key] = $row[$key2]; 
  14.         } 
  15.         $sort2 = $sort2 == 'asc' ? SORT_ASC : SORT_DESC; 
  16.         array_multisort($temp$sort1,$temp2,$sort2,$arr); 
  17.     } 
  18.     return $arr

实例二,代码如下:

  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;  
  16. $array = array
  17.  array('name'=>'手机','brand'=>'诺基亚','price'=>1050), 
  18.  array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300), 
  19.  array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100), 
  20.  array('name'=>'跑步机','brand'=>'三和松石','price'=>4900), 
  21.  array('name'=>'手表','brand'=>'卡西欧','price'=>960), 
  22.  array('name'=>'液晶电视','brand'=>'索尼','price'=>6299), 
  23.  array('name'=>'激光打印机','brand'=>'惠普','price'=>1200) 
  24. ); 
  25.  
  26. $ShoppingList = array_sort($array,'price'); 
  27. print_r($ShoppingList); 

面是对$array这个二维数组按照'price'从低到高的排序.

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论