1. 程式人生 > >非常有用的array_multisort多維陣列排序函式

非常有用的array_multisort多維陣列排序函式

array_multisort() 可以用來一次對多個數組進行排序或者根據某一維對多維陣列進行排序。排序時保留原有的鍵名關聯。

輸入陣列被當成一個表的列並以行來排序 - 這類似於 SQL 的 ORDER BY 子句的功能。第一個陣列是要排序的主要陣列。陣列中的行(值)比較為相同的話就按照下一個輸入陣列中相應值的大小來排序,依此類推。

本函式的引數結構有些不同尋常,但是非常靈活。第一個引數必須是一個數組。接下來的每個引數可以是陣列或者是下面列出的排序標誌。

排序順序標誌:

  • SORT_ASC - 按照上升順序排序

  • SORT_DESC - 按照下降順序排序

排序型別標誌:

  • SORT_REGULAR - 將專案按照通常方法比較

  • SORT_NUMERIC - 將專案按照數值比較

  • SORT_STRING - 將專案按照字串比較

每個陣列之後不能指定兩個同類的排序標誌。每個陣列後指定的排序標誌僅對該陣列有效 - 在此之前為預設值 SORT_ASC 和 SORT_REGULAR。

如果成功則返回 TRUE,失敗則返回 FALSE

例子 1. 對多個數組排序

<?php
$ar1
= array ("10", 100, 100, "a");
$ar2 = array (1, 3, "2", 1);
array_multisort ($ar1, $ar2);
?>

本例中經過排序後,第一個陣列將包含 10,"a",100,100。第二個陣列將包含 1,1,"2",3。第二個陣列中的專案順序完全和第一個陣列中相應的專案(100 和 100)順序一致。

例子 2. 對多維陣列排序

<?php
$ar
= array (array ("10", 100, 100, "a"), array (1, 3, "2", 1));
array_multisort ($ar[0], SORT_ASC, SORT_STRING,
                 
$ar[1], SORT_NUMERIC, SORT_DESC);
?>

本例中經過排序後,第一個陣列將包含 10,100,100,"a"(作為字串上升排序),第二個陣列將包含 1,3,"2",1(作為數值下降排序)。

【譯者注】本函式相當有用,為有助於理解,請看下面這個例子:

例子 3. 名次排列

$grade = array("score" => array(70, 95, 70.0, 60, "70"),
               "name" => array("Zhang San", "Li Si", "Wang Wu",
                               "Zhao Liu", "Liu Qi"));
array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC,
                // 將分數作為數值,由高到低排序
                $grade["name"], SORT_STRING, SORT_ASC);
                // 將名字作為字串,由小到大排序
var_dump($grade);
本例中對包含成績的陣列 $grade 按照分數(score)由高到低進行排序,分數相同的人則按照名字(name)由小到大排序。排序後李四 95 分為第一名,趙六 60 分為第五名沒有異議。張三、王五和劉七都是 70 分,他們的名次則由其姓名的字母順序排列,Liu 在前,Wang 在後而 Zhang 在最後。為了區別,三個 70 分分別用了整數,浮點數和字串來表示,可以在程式輸出中清楚地看到它們排序的結果。
----以上摘自PHP手冊 PHP陣列排序可以用array_multisort方法實現,但是如果是多維陣列,並且我們要指定陣列中的某個欄位進行排序,那麼這就需要我們自己寫方法實現了。本文分享了一段PHP指定欄位的多維陣列排序方法的程式碼,這段程式碼可實現根據field欄位對陣列進行排序。
 
view sourceprint?
function sortArrByField(&$array, $field, $desc = false){
$fieldArr = array();
foreach ($array as $k => $v) {
$fieldArr[$k] = $v[$field];
}
$sort = $desc == false ? SORT_ASC : SORT_DESC;
array_multisort($fieldArr, $sort, $array);
}
以上就是PHP指定欄位的多維陣列排序方法