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

php对多维数组的某个键值排序方法

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-11 15:30:36 浏览: 评论:0 

php多维数组排序可以用array_multisort() 函数来处理,array_multisort() 函数可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引.

排序顺序标志:

SORT_ASC - 按照上升顺序排序

SORT_DESC - 按照下降顺序排序

排序类型标志:

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

SORT_NUMERIC - 将项目按照数值比较

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

例子1.对多个数组排序,代码如下:

  1. <?php 
  2. $ar1 = array("10", 100, 100, "a"); 
  3. $ar2 = array(1, 3, "2", 1); 
  4. array_multisort($ar1$ar2); 
  5. var_dump($ar1); 
  6. var_dump($ar2); 
  7. ?> 

本例中经过排序后,第一个数组将包含 "10","a",100,100,第二个数组将包含 1,1,"2",3,第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致.

但是这些都不可以指定由那个键值进行排名了,下面我就整理了几个函数算法都不错.

示例代码如下:

  1. /** 
  2.  * 对多位数组进行排序 
  3.  * @param $multi_array 数组 
  4.  * @param $sort_key需要传入的键名 
  5.  * @param $sort排序类型 
  6.  */ 
  7. function multi_array_sort($multi_array$sort_key$sort = SORT_DESC) { 
  8. if (is_array($multi_array)) { 
  9. foreach ($multi_array as $row_array) { 
  10. if (is_array($row_array)) { 
  11. $key_array[] = $row_array[$sort_key]; 
  12. else { 
  13. return FALSE; 
  14. else { 
  15. return FALSE; 
  16. array_multisort($key_array$sort$multi_array); 
  17. return $multi_array

例子二,代码如下:

  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. }//开源软件:phpfensi.com 
  6. if ($type == 'asc') { 
  7. asort($keysvalue); 
  8. else { 
  9. arsort($keysvalue); 
  10. reset($keysvalue); 
  11. foreach ($keysvalue as $k => $v) { 
  12. $new_array[] = $arr[$k]; 
  13. return $new_array

例子3,代码如下:

  1. /* 
  2. function:二维数组按指定的键值排序 
  3. author:www.phpfensi.com 
  4. */ 
  5. function array_sort($array,$keys,$type='asc'){ 
  6. if(!isset($array) || !is_array($array) || emptyempty($array)){ 
  7. return ''
  8. if(!isset($keys) || trim($keys)==''){ 
  9. return ''
  10. if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){ 
  11. return ''
  12. $keysvalue=array(); 
  13. foreach($array as $key=>$val){ 
  14. $val[$keys] = str_replace('-','',$val[$keys]); 
  15. $val[$keys] = str_replace(' ','',$val[$keys]); 
  16. $val[$keys] = str_replace(':','',$val[$keys]); 
  17. $keysvalue[] =$val[$keys]; 
  18. asort($keysvalue); //key值排序 
  19. reset($keysvalue); //指针重新指向数组第一个 
  20. foreach($keysvalue as $key=>$vals) { 
  21. $keysort[] = $key
  22. $keysvalue = array(); 
  23. $count=count($keysort); 
  24. if(strtolower($type) != 'asc'){ 
  25. for($i=$count-1; $i>=0; $i--) { 
  26. $keysvalue[] = $array[$keysort[$i]]; 
  27. }else
  28. for($i=0; $i<$count$i++){ 
  29. $keysvalue[] = $array[$keysort[$i]]; 
  30. return $keysvalue

例如有下列这样一个数组,代码如下:

  1. $array=array
  2. 0=>array('id'=>8,'username'=>'phpernote'), 
  3. 1=>array('id'=>9,'username'=>'com'), 
  4. 2=>array('id'=>5,'username'=>'www'
  5. ); 

现在需要将这个二维数组按id升序排列,则:array_sort($array,'id','asc');

Tags: php多维数组 php键值排序

分享到: