array_multisort() 可以用來一次對多個陣列進行排序,或是根據某一維或多維對多維數組進行排序。
array_multisort — 排序多個陣列或多維陣列 [
說明
bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )
array_multisort
(PHP 4, PHP 5)
如果成功則回傳TRUE,失敗則傳回FALSE。
array_multisort() 可以用來一次對多個陣列進行排序,或是根據某一維或多維對多維數組進行排序。
關聯(string)鍵名保持不變,但數字鍵名會被重新索引。
輸入陣列被當成一個表格的欄位並以行來排序――這類似於 SQL 的 ORDER BY 子句的函數。第一個陣列是要排序的主要陣列。數組中的行(值)比較為相同的話就按照下一個輸入數組中對應值的大小來排序,依此類推。
本函數的參數結構有些不尋常,但是非常靈活。第一個參數必須是一個陣列。接下來的每個參數可以是陣列或是下面列出的排序標誌。
排序順序標誌:
SORT_ASC – 依照上升順序排序
SORT_DESC – 依照下降順序排序
排序類型標誌:
SORT_REGULAR – 將項目依照通常方法比較
SORT_NUMERIC – 將項目依照數值比較
SORT_STRING – 將項目依照字串比較
每個陣列之後不能指定兩個同類的排序標誌。每個數組後指定的排序標誌僅對該數組有效 – 在此之前為預設值 SORT_ASC 和 SORT_REGULAR。
範例1. 對多個陣列排序
<?php $ar1 = array(“10″, 100, 100, “a”); $ar2 = array(1, 3, “2″, 1); array_multisort($ar1, $ar2); var_dump($ar1); var_dump($ar2); ?>
本例中經過排序後,第一個陣列將包含“10″,”a” ,100,100。第二個陣列將包含 1,1,”2″,3。第二個陣列中的項目順序完全和第一個陣列中對應的項目(100 和 100)順序一致。
array(4) { [0]=> string(2) “10″ [1]=> string(1) “a” [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(1) [1]=> int(1) [2]=> string(1) “2″ [3]=> int(3) }
範例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. Sorting multi-dimensional array
<?php $ar = array( array(“10″, 11, 100, 100, “a”), array( 1, 2, “2″, 3, 1) ); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); var_dump($ar); ?>
本例中在排序後,第一個陣列將變成「10″,100,100,11,」a」(被當作字串以升序排列)。第二個數組將包含 1, 3, “2″, 2, 1(被當作數字以降序排列)。
array(2) { [0]=> array(5) { [0]=> string(2) “10″ [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) “a” } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) “2″ [3]=> int(2) [4]=> int(1) } }
範例 4. 對資料庫結果進行排序
本例中 data 陣列中的每個單元表示一個表格中的一行。這是典型的資料庫記錄的資料集合。
範例中的資料如下:
volume | edition
——-+——–
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
資料全都存放在名為data 的陣列中。這通常是透過循環從資料庫取得的結果,例如 mysql_fetch_assoc()。
<?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); ?>
本例將把 volume 降序排列,把 edition 升序排列。
現在有了包含有行的數組,但是 array_multisort() 需要一個包含列的數組,因此用以下程式碼來取得列,然後排序。
<?php // 取得列的列表 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); ?>
資料集合現在排好序了,結果如下:
volume | edition
——-+——–
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7
範例5. 不區分大小寫字母排序
SORT_STRING 和SORT_REGULAR 都是區分大小寫字母的,大寫字母會排在小寫字母之前。
要進行不區分大小寫的排序,就要依照原數組的小寫字母拷貝來排序。
<?php $array = array(‘Alpha', ‘atomic', ‘Beta', ‘bank'); $array_lowercase = array_map('strtolower', $array); array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array); print_r($array); ?>
上例將輸出:
Array ( [0] => Alpha [1] => atomic [2] => bank [3] => Beta )
补充资料:
对于PHP语言中的多维数组排序时最为复杂的一个排序方式。我们在实际编码中将会用到PHP函数array_multisort()来实现这一复杂的排序。例如,首先对一个嵌套数组使用一个普通的关键字进行排序,然后再根据另一个关键字进行排序。这与使用SQL的ORDER BY语句对多个字段进行排序非常相似。
PHP函数asort()利用值排序的具体方式解析
PHP函数arsort()的功能特点详解
PHP自然语言排序的特点介绍
PHP自然语言倒序的具体实现方式
如何运用PHP函数usort()实现自定义排序
Listing J示例为我们具体说明了PHP函数array_multisort()的工作方式:
1, "name" => "Boney M", "rating" => 3), array("id" => 2, "name" => "Take That", "rating" => 1), array("id" => 3, "name" => "The Killers", "rating" => 4), array("id" => 4, "name" => "Lusain", "rating" => 3), ); foreach ($data as $key => $value) { $name[$key] = $value[name]; $rating[$key] = $value[rating]; } array_multisort($rating, $name, $data); print_r($data);?> 这里,我们在$data数组中模拟了一个行和列数组。然后,我使用PHP函数array_multisort()对数据集合进行重排,首先是根据rating进行排序,然后,如果rating相等的话,再根据name排序。它的输出结果如下:
Array ([0] => Array ( [id] => 2 [name] => Take That [rating] => 1 ) [1] => Array ( [id] => 1 [name] => Boney M [rating] => 3 ) [2] => Array ( [id] => 4 [name] => Lusain [rating] => 3 ) [3] => Array ( [id] => 3 [name] => The Killers [rating] => 4 ) )
PHP函数array_multisort()是PHP中最有用的函数之一,它有非常广泛的应用范围。另外,就如你在例子中所看到的,它能对多个不相关的数组进行排序,也可以使用其中的一个元素作为下次排序的基础,还可以对数据库结果集进行排序。
以上是如何使用array_multisort 函數對多個陣列或多維數組進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!