PHP數組排序,一維數組,二維數組排序


一維數組排序

1. sort,rsort排序(r(reverse表示翻轉,即為降序排列)),通過鍵值排序。

<?php
$arr=array(10,2,4,1,5,8,7,9);
//等效於 $arr=array('0'=>10,'1'=>2,'2'=>4,'3'=>1,'4'=>5,'5'=>8,'6'=>7,'7'=>9);
//默認的排序,按鍵值升序排序,鍵名被從新規定,例如10原來的鍵名是0,現在是7
sort($arr);
 
var_dump($arr);
 
/*array (size=8)
  0 => int 1
  1 => int 2
  2 => int 4
  3 => int 5
  4 => int 7
  5 => int 8
  6 => int 9
  7 => int 10
 */
?>
<?php
$arr=array(10,2,4,1,5,8,7,9);
 
//默認的排序,按鍵值降序排序,鍵名被從新規定,同上
rsort($arr);
 
var_dump($arr);
 
/*array (size=8)
  0 => int 10
  1 => int 9
  2 => int 8
  3 => int 7
  4 => int 5
  5 => int 4
  6 => int 2
  7 => int 1
 */
?>

2. ksort,krsort排序,通過鍵名排序。

<?php
$arr=array(10,2,4,1,5,8,7,9);
 
//按鍵鍵名升序排序
ksort($arr);
 
var_dump($arr);
 
/*array (size=8)
  0 => int 10
  1 => int 2
  2 => int 4
  3 => int 1
  4 => int 5
  5 => int 8
  6 => int 7
  7 => int 9*/
?>
<?php
$arr=array(10,2,4,1,5,8,7,9);
 
//按鍵鍵名降序排序
krsort($arr);
 
var_dump($arr);
 
/*array (size=8)
  7 => int 9
  6 => int 7
  5 => int 8
  4 => int 5
  3 => int 1
  2 => int 4
  1 => int 2
  0 => int 10*/
?>

3. asort,arsort排序,通過鍵值排序。

<?php
$arr=array(10,2,4,1,5,8,7,9);
 
//按鍵鍵值升序排序,和sort不同的是,鍵名不會重新定義
asort($arr);
 
var_dump($arr);
 
/*array (size=8)
  3 => int 1
  1 => int 2
  2 => int 4
  4 => int 5
  6 => int 7
  5 => int 8
  7 => int 9
  0 => int 10*/
?>
<?php
$arr=array(10,2,4,1,5,8,7,9);
 
//按鍵鍵值降序排序,和rsort不同的是,鍵名不會重新定義
arsort($arr);
 
var_dump($arr);
 
/*array (size=8)
  0 => int 10
  7 => int 9
  5 => int 8
  6 => int 7
  4 => int 5
  2 => int 4
  1 => int 2
  3 => int 1*/
?>

二維數組根據某個鍵排序

//二維數組排序
function sortArr($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC ){
    $key_arrays =array();
    if(is_array($arrays)){
        foreach ($arrays as $array){
            if(is_array($array)){
                $key_arrays[] = $array[$sort_key];
            }else{
                return false;
            }
        }
    }else{
        return false;
    }
    array_multisort($key_arrays,$sort_order,$sort_type,$arrays);
    return $arrays;
}

//$data表示二維數組,結構比如說從數據讀取出來的多行表結構,'date'表示每行里面的一個字段,通過這個字段排序
//SORT_DESC表示降序排列,SORT_STRING表示設置'date'字段的比較以字符串方式進行
$newData = $this->sortArr($data,'date',SORT_DESC,SORT_STRING);

二維數組根據多個鍵排序

//二維數組多鍵值排序
function my_sort($arrays,$sort_key,$sort_key1,$sort_order=SORT_ASC,$sort_order1=SORT_DESC){
    $key_arrays = $key_arrays1 = array();
    if(is_array($arrays)){
        foreach ($arrays as $array){
            if(is_array($array)){
                $key_arrays[] = $array[$sort_key];
                $key_arrays1[] = $array[$sort_key1];
            }else{
                return false;
            }
        }
    }else{
        return false;
    }
    array_multisort($key_arrays,$sort_order,$key_arrays1,$sort_order1,$arrays);
    return $arrays;
}

//$data表示二維數組,結構比如說從數據讀取出來的多行表結構
//'date'表示每行里面的一個字段,通過這個字段排序,然后通過'time'字段排序
//SORT_DESC,SORT_ASC分別對應'date','time'兩個字段的排序方式
//效果類似於數據庫中order by data desc,time asc。
$newData = $this->sortArr($data,'date','time',SORT_DESC,SORT_ASC);

來自微信公眾號:編程社

程序員日常進階寶典,歡迎關注!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM