首页 > 其他 > 详细

二维数组排序 n种算法

时间:2014-04-02 08:04:17      阅读:488      评论:0      收藏:0      [点我收藏+]

        一维数组排序非常简单,二维数组排序怎样呀,二维数组的排序也是根据两个函数asortarsort这两个函数非常好用,为什么这两个函数在排一维数组时,很好的保留了索引,二维数组的排序也是根据一维数组的排序,借助索引生成一个新的二维数组,代码如下。(第一种什么类型都可以排序)

第一种:

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);





二维数组排序 n种算法,布布扣,bubuko.com

二维数组排序 n种算法

原文:http://blog.csdn.net/xingjigongsi/article/details/22757173

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!