在PHP中如何利用usort函数对二维数组进行有效排序

作者:admin     字体:[增加 减小]    类型:原创
在JavaScript语言中有一个函数Array.prototype.sort()它可以对数组以及类数组进行有效排序,同样在PHP中也有排序函数,而且提供了好几个排序函数,但是有些人没有灵活掌握,造成使用的时候乱写一通代码,下面举例说明。

在PHP中有一个函数usort,用于给数组排序,但是很多人不会灵活运用它,下面是别人写的一个函数sort_2d_array(),用于给二维数组排序,从中我们会发现很多问题。

function sort_2d_array($array, $position, $order = "ASC"){ 
   if (!is_array($array)) return $array; 
   if (count($array) < 2) return $array; 
   $new = array($array[0]); 
   for ($cnt = 1; $cnt <= count($array) - 1; $cnt++){ 
     $stop = 0; 
     $splice = 0; 
     for ($newcnt = 0; $newcnt <= count($new) - 1; $newcnt++){ 
       if ($stop == 0){ 
         if ($order == "ASC") 
         if ($array[$cnt][$position] < $new[$newcnt][$position]){ 
           $splice = $newcnt; 
           $stop = 1; 
         } // splice position for ASC 
         if ($order == "DESC") 
         if ($array[$cnt][$position] > $new[$newcnt][$position]){ 
           $splice = $newcnt; 
           $stop = 1; 
         } // splice position for DESC 
       } // stop vying for position 
     } // cycle through new array to find position 
     if ($stop == 0){ 
       $new[] = $array[$cnt]; 
     } else { 
       array_splice($new, $splice, 0, array($array[$cnt])); 
     } // splice into new array while keeping somewhat the original order 
   } // cycle through original array 
   return $new; 
} // sort_2d_array 

比如,有下面这样一个数组

$arr = Array
(
    0 => Array
        (
            'post_id' => 1
            'views' => 16
        )
    ,
    1 => Array
        (
            'post_id' => 2
            'views' => 3
        )
    ,
    2 => Array
        (
            'post_id' => 3
            'views' => 5
        )
    ,
    3 => Array
        (
            'post_id' => 4
            'views' => 10
        )
    ,
    4 => Array
        (
            'post_id' => 5
            'views' => 7
        )
    ,
    5 => Array
        (
            'post_id' => 6
            'views' => 3
        )
);

这个数组是从数据库中取出来的,但是现在想根据“views”进行升序排序,那么就可以利用sort_2d_array($arr,'views','ASC')函数,得到所需要的结果。看似这个函数完美地解决了二维数组排序的问题,实则不然。因为我们可以利用usort函数对它进行排序:

usort($arr,function($a,$b){
    return $a['views'] - $b['views'];
});

看上面的代码多少简练,简短的三行就解决了上面一大堆代码的问题。所以说,有的时候工作效率低下,完全跟知识掌握程度有关。