一維數組排序非常簡單,二維數組排序怎樣呀,二維數組的排序也是根據兩個函數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);