首頁  >  文章  >  後端開發  >  PHP二維數組排序

PHP二維數組排序

巴扎黑
巴扎黑原創
2016-11-24 13:43:201276瀏覽

PHP本身是有一個多維數組排序的函數的。

bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $... ]]] )

下面是手冊當中對於array_multisort函數的描述:

array_multisort() 可以用來一次對多個數組進行排序,或根據某一維或多維對多維數組進行排序。 
關聯(string)鍵名維持不變,但數字鍵名會被重新索引。 
輸入陣列被當成一個表格的欄位並且以行來排序――這類似於 SQL 的 ORDER BY 子句的函數。第一個陣列是要排序的主要陣列。數組中的行(值)比較相同的話就按照下一個輸入數組中對應值的大小來排序,依此類推。 

從手冊中看到,PHP本身的多維排序,是依照第一個陣列進行排序,並且調整後面的順序。像這樣的陣列:

array( 'id' => array(1,3,2),

'data'=>array('a','c','b'))

只要按照id進行多維排序,就可以了。但很多時候,我們建構出來的陣列是這樣的:

array(
array('id'=>1,'data'=>'a'),
array('id'=>3,'data' =>'c'),
array('id'=>2,'data'=>'b')
);

數組的元素是按行排列的,需要按其中的一列進行排序。 PHP好像也沒提供類似矩陣轉置的函數,所以不能直接用array_multisort進行多維排序。不過只需要先把排序的列抽取出來,作為第一個參數傳給array_multisort即可。

function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){  
    if(is_array($multi_array)){  
        foreach ($multi_array as $row_array){  
            if(is_array($row_array)){  
                $key_array[] = $row_array[$sort_key];  
            }else{  
                return -1;  
            }  
        }  
    }else{  
        return -1;  
    }  
    array_multisort($key_array,$sort,$multi_array);  
    return $multi_array;  
}


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn