一、基礎知識
1、array_multisort是什麼
array_multisort是一個用於排序多個數組或多維數組的PHP函數,它將一個或多個數組數據進行重新排序,並將它們重新排列以匹配給定的數組
2、array_multisort函數的語法
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )
3、array_multisort的參數
array1:要排序的數組
array1_sort_order:用於按相反順序排列數組1的參數,默認為SORT_ASC,表示按升序排列。
array1_sort_flags:用於定義按元素的類型進行排序的標誌的參數,默認為SORT_REGULAR,表示將元素比較為普通類型。
…:可選的其他數組,每個數組以相反順序排列,並與其他數組作為變量,以便在排序時用作重命名鍵名。如果兩個或更多值相同,則按照升序排列。如果值是對象,則按引用進行排序;如果值是資源,則會觸發警告並給出排序的未定義結果。
二、常用用法
1、對單個數組排序
單個數組的排序可以使用array_multisort的最基本形式,只需要傳遞要排序的數組作為參數即可。
$ages = array(22, 11, 35, 65, 48, 56); array_multisort($ages); print_r($ages);
2、按一個數組的順序對多個數組排序
在某些情況下,我們需要根據另一個數組的順序排序,這時候可以使用array_multisort,並將需要排序的數組作為參數,將顯示排序結果的數組作為$sortOrder參數。
$ages = array(22, 11, 35, 65, 48, 56); $names = array('John', 'Peter', 'Mary', 'Maggie', 'Doe', 'Linda'); array_multisort($ages, SORT_DESC, SORT_NUMERIC, $names); print_r($ages); print_r($names);
3、二維數組的多個字段排序
對二維數組進行排序的時候,可以使用數組索引作為排序依據。在這種情況下,可以使用array_column來獲得數組索引,再將其與array_multisort結合使用,即可完成對二維數組多個字段進行排序。
$students = array( array('name'=>'John', 'grade'=>5, 'age'=>13), array('name'=>'Peter', 'grade'=>2, 'age'=>12), array('name'=>'Mary', 'grade'=>5, 'age'=>14), array('name'=>'Maggie', 'grade'=>4, 'age'=>15), array('name'=>'Doe', 'grade'=>3, 'age'=>13), array('name'=>'Linda', 'grade'=>5, 'age'=>11), ); $sortName = array_column($students, 'name'); $sortGrade = array_column($students, 'grade'); $sortAge = array_column($students, 'age'); array_multisort($sortGrade, SORT_ASC, $sortName, SORT_ASC, $sortAge, SORT_ASC, $students); print_r($students);
三、小技巧
1、對關聯數組排序
關聯數組和索引數組一樣可以使用array_multisort來進行排序,但需要注意的是,使用該函數會重置數組的索引,那麼排序後的數組必然是索引數組,所以需要再重新賦值給我們需要的關聯數組。
$students = array( 'john'=>array('grade'=>5, 'age'=>13), 'peter'=>array('grade'=>2, 'age'=>12), 'mary'=>array('grade'=>5, 'age'=>14), 'maggie'=>array('grade'=>4, 'age'=>15), 'doe'=>array('grade'=>3, 'age'=>13), 'linda'=>array('grade'=>5, 'age'=>11), ); $sortGrade = array_column($students, 'grade'); $sortAge = array_column($students, 'age'); array_multisort($sortGrade, SORT_ASC, SORT_NUMERIC, $sortAge, SORT_ASC, SORT_NUMERIC, $students); // 重建關聯數組,需注意順序保持一致 $keys = array_keys($students); $id = 0; foreach($keys as $key){ $result[$key] = $students[$key]; $id++; } print_r($result);
2、根據指定字段條件排序
在一些情況下,我們需要根據特定字段來排序,可以使用usort函數,該函數可接受自定義回調函數,實現更多的靈活性。
$students = array( array('name'=>'John', 'grade'=>5, 'age'=>13), array('name'=>'Peter', 'grade'=>2, 'age'=>12), array('name'=>'Mary', 'grade'=>5, 'age'=>14), array('name'=>'Maggie', 'grade'=>4, 'age'=>15), array('name'=>'Doe', 'grade'=>3, 'age'=>13), array('name'=>'Linda', 'grade'=>5, 'age'=>11), ); function sortStudents($a, $b) { return $a['grade'] - $b['grade']; } usort($students, 'sortStudents'); print_r($students);
四、總結
本篇文章詳細介紹了array_multisort函數的基礎知識、常用用法和小技巧,讓讀者熟練掌握了該函數的使用方法,能夠利用該函數迅速完成數組的排序,並能夠解決一些具體的問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/190590.html