一维数组排序非常简单,二维数组排序怎样呀,二维数组的排序也是根据两个函数asort和arsort这两个函数非常好用,为什么这两个函数在排一维数组时,很好的保留了索引,二维数组的排序也是根据一维数组的排序,借助索引生成一个新的二维数组,代码如下。(第一种什么类型都可以排序)
第一种:
class Arraysort { private function __construct() { } /** * * @param Array $arr * 数组 * @param String $keys * 数组某一列 * @param int $order * 数组排序 * @return boolean multitype:unknown */ private static function array_sort($arr, $keys, $order) { if (! is_array ( $arr )) { echo "$arr 不是数组"; return false; } $kearray = array (); $keyarray = array (); $newarray = array (); foreach ( $arr as $val ) { $keyarray [] = $val [$keys]; } if ($order == 0) { asort ( $keyarray ); } else { arsort ( $keyarray ); } foreach ( $keyarray as $key => $val ) { $kearray [] = $key; } foreach ( $kearray as $value ) { $newarray [] = $arr [$value]; } return $newarray; } public static function main($arr, $keys, $order = 0) { $newarray = self::array_sort ( $arr, $keys, $order); return $newarray; } } $person = array ( array ( ‘id‘ => 2, ‘name‘ => ‘zhangsan‘, ‘age‘ => 23 ), array ( ‘id‘ => 5, ‘name‘ => ‘lisi‘, ‘age‘ => 28 ), array ( ‘id‘ => 3, ‘name‘ => ‘apple‘, ‘age‘ => 17 ) ); $a = Arraysort::main ( $person, ‘name‘); print_r ( $a );
对于二维数组排序,如果是数字型的如时间是时间戳等等有更简单的方法如下主要是usort关于这个方法的使用可以根据官网。
第二种:
class arraysort{ private function __construct(){ } private static function arr_sort($a,$b){ return $b[‘id‘]-$a[‘id‘]; } public static function main($ar){ usort($ar, array(arraysort,arr_sort)); return $ar; } } $person = array( array(‘id‘ => 2, ‘name‘ => ‘zhangsan‘, ‘age‘ => 23), array(‘id‘ => 5, ‘name‘ => ‘lisi‘, ‘age‘ => 28), array(‘id‘ => 3, ‘name‘ => ‘apple‘, ‘age‘ => 17) ); print_r(arraysort::main($person));
第三种:根据系统函数array_multisort();关于函数具体用法见官网(http://www.php.net/manual/zh/function.array-multisort.php)具体方法如下:
$data[] = array(‘volume‘ => 67, ‘edition‘ => 2); $data[] = array(‘volume‘ => 86, ‘edition‘ => 1); $data[] = array(‘volume‘ => 85, ‘edition‘ => 6); $data[] = array(‘volume‘ => 98, ‘edition‘ => 2); $data[] = array(‘volume‘ => 86, ‘edition‘ => 6); $data[] = array(‘volume‘ => 67, ‘edition‘ => 7); foreach ($data as $key => $row) { $volume[$key] = $row[‘volume‘]; $edition[$key] = $row[‘edition‘]; } // 将数据根据 volume 降序排列,根据 edition 升序排列 // 把 $data 作为最后一个参数,以通用键排序 array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
原文:http://blog.csdn.net/xingjigongsi/article/details/22757173