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

PHP关联数组排序几种方法

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-11 16:54:24 浏览: 评论:0 

对于普通数据排序我们直接使用系统自带数组排序函数即可,如果是关系数组排序你知道如何操作吧?下面来给各位整理了几个例子大家一起来看看吧.

参数说明:$data 目标数组 $key 排序字段, $sort 排序规则,代码如下:

  1. function getSortArray($data,$key,$sort='ASC'
  2.     if(!is_array($data)) 
  3.     { 
  4.        return false; 
  5.     } 
  6.         
  7.     $len = count($data); 
  8.     
  9.     for($k=1; $k<$len$k++) 
  10.     { 
  11.       for($j=$len-1,$i=0;$i<$len-$k;$i++,$j--) 
  12.       { 
  13.         if(strtoupper($sort) == 'DESC'
  14.         { 
  15.            $flag = $data[$j][$key]>$data[$j-1][$key]; 
  16.         } 
  17.         else 
  18.         { 
  19.            $flag = $data[$j][$key]<$data[$j-1][$key]; 
  20.         }  
  21.     
  22.         if($flag
  23.         { 
  24.           $tmp  = $data[$j]; 
  25.           $data[$j]   = $data[$j-1]; 
  26.           $data[$j-1] = $tmp
  27.         }  //开源软件:phpfensi.com 
  28.       } 
  29.     } 
  30.     return $data
  31. //使用方法: 
  32. $a = array
  33.        array('name'=>'stone','age'=>17,'sex'=>'男'), 
  34.        array('name'=>'sunny','age'=>28), 
  35.        array('name'=>'grass','age'=>16,'sex'=>'女'), 
  36.        array('name'=>'sea','age'=>15,'birthday'=>'1987-08-16'
  37.      ); 
  38. print_r(getSortArray($a,'age','desc')); 
  39. //结果: 
  40. Array 
  41.    [0] => Array 
  42.        ( 
  43.            [name] => sunny 
  44.            [age] => 28 
  45.        ) 
  46.  
  47.    [1] => Array 
  48.        ( 
  49.            [name] => stone 
  50.            [age] => 17 
  51.            [sex] => 男 
  52.        ) 
  53.  
  54.    [2] => Array 
  55.        ( 
  56.            [name] => grass 
  57.            [age] => 16 
  58.            [sex] => 女 
  59.        ) 
  60.  
  61.    [3] => Array 
  62.        ( 
  63.            [name] => sea 
  64.            [age] => 15 
  65.            [birthday] => 1987-08-16 
  66.        ) 
  67.  

不知道你有没有看懂呢?没懂我们再看两个数组排序例子,要对数组针对age字段进行排序,php自带的简单sort功能函数,显然都不能满足需求,因此需要自己写一个快速排序代码来实现相应的需求,代码如下:

  1. <?php 
  2. /**  
  3.  * Description:获取中枢点的位置  
  4.  *  
  5.  * @param array $array              
  6.  * @param int $left              
  7.  * @param int $right              
  8.  * @param string $field              
  9.  * @return int  
  10.  */   
  11. function fetchArrayPivot (&$array$left$right$field)   
  12. {   
  13.     // 基准定义   
  14.     $stand = $array[$left];   
  15.        
  16.     // 遍历数组   
  17.     while ($left < $right) {   
  18.         while ($left < $right && $array[$right][$field] >= $stand[$field]) {   
  19.             $right --;   
  20.         }   
  21.         if ($left < $right) {   
  22.             $array[$left ++] = $array[$right];   
  23.         }   
  24.            
  25.         while ($left < $right && $array[$left][$field] <= $stand[$field]) {   
  26.             $left ++;   
  27.         }   
  28.         if ($left < $right) {   
  29.             $array[$right --] = $array[$left];   
  30.         }   
  31.     }   
  32.        
  33.     // 获取中枢点位置   
  34.     $array[$left] = $stand;   
  35.        
  36.     return $left;   
  37. }   
  38.    
  39. /**  
  40.  * Description:快速排序主程序  
  41.  *  
  42.  * @param array $array              
  43.  * @param int $begin              
  44.  * @param int $end              
  45.  * @param string $field              
  46.  */   
  47. function quickSort (&$array$begin$end$field)   
  48. {   
  49.     // 变量定义   
  50.     $pivot = null;   
  51.        
  52.     if ($begin < $end) {   
  53.         $pivot = fetchArrayPivot($array$begin$end$field);   
  54.         quickSort($array$begin$pivot - 1, $field);   
  55.         quickSort($array$pivot + 1, $end$field);   
  56.     }   
  57. }  
  58. ?> 

调用示例:

  1. <?php   
  2. $array = array(   
  3.         array(   
  4.                 'name' => "xiao",   
  5.                 'age' => 3   
  6.         ),   
  7.         array(   
  8.                 'name' => 'wang',   
  9.                 'age' => 1   
  10.         ),   
  11.         array(   
  12.                 'name' => 'chen',   
  13.                 'age' => 2   
  14.         ),   
  15.         array(   
  16.                 'name' => 'zhengyi',   
  17.                 'age' => 4   
  18.         ),   
  19.         array(   
  20.                 'name' => 'chai',   
  21.                 'age' => 14   
  22.         )   
  23. );   
  24.    
  25. $begin = getTime();   
  26. quickSort($array, 0, count($array) - 1, 'age');   
  27. print_r($array);   
  28. $end = getTime();   
  29. $spend = $end - $begin;   
  30. //开源软件:phpfensi.com 
  31. echo "花费时间为:".$spend."秒n";   
  32.    
  33. function getTime()   
  34. {   
  35.     list($msec$sec) = explode(" ", microtime());   
  36.     return (float)$msec + (float)$sec;   
  37. ?>

Tags: PHP关联数组 PHP数组排序

分享到: