程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 二維數組排序 n種算法

二維數組排序 n種算法

編輯:C++入門知識

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





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved