首頁  >  文章  >  後端開發  >  如何使用array_multisort 函數對多個陣列或多維數組進行排序?

如何使用array_multisort 函數對多個陣列或多維數組進行排序?

伊谢尔伦
伊谢尔伦原創
2017-06-26 11:33:001535瀏覽

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&#39; => 67, ‘edition&#39; => 2); 
$data[] = array(‘volume&#39; => 86, ‘edition&#39; => 1); 
$data[] = array(‘volume&#39; => 85, ‘edition&#39; => 6); 
$data[] = array(‘volume&#39; => 98, ‘edition&#39; => 2); 
$data[] = array(‘volume&#39; => 86, ‘edition&#39; => 6); 
$data[] = array(‘volume&#39; => 67, ‘edition&#39; => 7); 
?>

本例將把 volume 降序排列,把 edition 升序排列。
現在有了包含有行的數組,但是 array_multisort() 需要一個包含列的數組,因此用以下程式碼來取得列,然後排序。

<?php 
// 取得列的列表 
foreach ($data as $key => $row) { 
$volume[$key] = $row[&#39;volume&#39;]; 
$edition[$key] = $row[&#39;edition&#39;]; 
} 
// 将数据根据 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&#39;, ‘atomic&#39;, ‘Beta&#39;, ‘bank&#39;); 
$array_lowercase = array_map(&#39;strtolower&#39;, $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中文網其他相關文章!

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