一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP下對數組進行排序的函數

PHP下對數組進行排序的函數

2019-11-06 11:09php技術網 PHP教程

如果你已經使用了一段時間PHP的話,那么,你應該已經對它的數組比較熟悉了——這種數據結構允許你在單個變量中存儲多個值,并且可以把它們作為一個集合進行操作。

經常,開發人員發現在PHP中使用這種數據結構對值或者數組元素進行排序非常有用。PHP提供了一些適合多種數組的排序函數,這些函數允許你在數組內部對元素進行排列,也允許用很多不同的方法對它們進行重新排序。在這篇文章中我們將討論該排序中最重要的幾個函數。 
簡單排序 
首先,讓我們來看看最簡單的情況:將一個數組元素從低到高進行簡單排序,這個函數既可以按數字大小排列也可以按字母順序排列。PHP的sort()函數實現了這個功能,如Listing A所示: 
Listing A 

復制代碼代碼如下:


<?php 
$data = array(5,8,1,7,2); 
sort($data); 
print_r($data); 
?> 


輸出結果如下所示: 

復制代碼代碼如下:


Array ([0] => 1 
[1] => 2 
[2] => 5 
[3] => 7 
[4] => 8 


也能使用rsort()函數進行排序,它的結果與前面所使用的sort()簡單排序結果相反。Rsort()函數對數組元素進行從高到低的倒排,同樣可以按數字大小排列也可以按字母順序排列。Listing B給我們展示了它的一個例子: 
Listing B 

復制代碼代碼如下:


<?php $data = array(5,8,1,7,2);rsort($data); print_r($data); 
?> 


它的輸出結果如下: 

復制代碼代碼如下:


Array ([0] => 8 
[1] => 7 
[2] => 5 
[3] => 2 
[4] => 1 


根據關鍵字排序 
當我們使用數組的時候,經常根據關鍵字對數組重新排序,從高到低。Ksort()函數就是根據關鍵字進行排序的函數,同時,它在排序的過程中會保持關鍵字的相關性。Listing C就是一個例子: 
Listing C 

復制代碼代碼如下:


<?php $data = array(“US” => “United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);ksort($data); print_r($data); 
?> 


它的輸出結果如下: 

復制代碼代碼如下:


Array ([DE] => Germany 
[ES] => Spain 
[IN] => India 
[US] => United States 


Krsort()函數是根據關鍵字對數組進行倒排,Listing D就是這樣的例子: 
Listing D 

復制代碼代碼如下:


<?php $data = array(“US” => “United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);krsort($data); print_r($data); 
?> 


它的輸出結果如下: 

復制代碼代碼如下:


Array ([US] => United States 
[IN] => India 
[ES] => Spain 
[DE] => Germany 


根據值排序 
如果你想使用值排序來取代關鍵字排序的話,PHP也能滿足你的要求。你只要使用asort()函數來代替先前提到的ksort()函數就可以了。如Listing E所示: 
Listing E 

復制代碼代碼如下:


<?php $data = array(“US” => “United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);asort($data); print_r($data); 
?> 


下面就是它的輸出結果。請注意這個結果與上面使用ksort()函數所得到的結果的不同——在這兩種情況中,都是按字母順序進行排序的,但是它們是根據數組的不同字段進行排序的。 
同時,請注意關鍵字-值之間的聯系會始終保持;它只是關鍵字-值對排序后的一種方式,排序并不會改變它們的對應關系。 
Array ([DE] => Germany 
[IN] => India 
[ES] => Spain 
[US] => United States 

現在,你肯定能猜到這種排序也可以進行倒排,它使用arsort()函數完成這個功能。Listing F就是一個例子: 
Listing F 

復制代碼代碼如下:


<?php $data = array(“US” => “United States”, “IN” => “India”, “DE” => “Germany”, “ES” => “Spain”);arsort($data); print_r($data); 
?> 


下面是它的輸出結果,根據值按字母表順序進行倒排。將下面的結果與用krsort()函數進行倒排后生成的結果進行比較,就能很容易明白兩者的不同了。 

復制代碼代碼如下:


Array ([US] => United States 
[ES] => Spain 
[IN] => India 
[DE] => Germany 


自然語言排序 
PHP有一個非常獨特的排序方式,這種方式使用認知而不是使用計算規則。這種特性稱為自然語言排序,當創建模糊邏輯應用軟件的時候這種排序方式非常有用。下面大家可以來看看它的一個簡單例子,如Listing G所示: 
Listing G 

復制代碼代碼如下:


<?php $data = array(“book-1″, “book-10″, “book-100″, “book-5″); sort($data);print_r($data); 
natsort($data); print_r($data);?> 


它的輸出結果如下: 

復制代碼代碼如下:


Array ([0] => book-1 
[1] => book-10 
[2] => book-100 
[3] => book-5 

Array 

[0] => book-1 
[3] => book-5 
[1] => book-10 
[2] => book-100 


它們的不同已經很清楚了:第二個排序結果更直觀,更“人性化”,然而第一個則更符合算法規則,更具“計算機”特點。 
自然語言能進行倒排嗎?答案是肯定的!只要對natsort()的結果使用array_reverse()函數就可以了,Listing H就是一個簡單例子: 
Listing H 

復制代碼代碼如下:


<?php $data = array(“book-1″, “book-10″, “book-100″, “book-5″);natsort($data); print_r(array_reverse($data)); 
?> 


下面是它的輸出結果: 

復制代碼代碼如下:


Array ([0] => book-100 
[1] => book-10 
[2] => book-5 
[3] => book-1 


根據用戶自定義的規則排序 
PHP也能讓你定義自己的排序算法,你可以通過創建你自己的比較函數,并把它傳遞給usort()函數。如果第一個參數比第二個參數“小”的話,比較函數必須返回一個比0小的數,如果第一參數比第二個參數“大”的話,比較函數應該返回一個比0大的數。 
Listing I就是這樣的一個例子,在這個例子中根據它們的長度對數組元素進行排序,最短的項放在最前面: 
Listing I 

復制代碼代碼如下:


<?php $data = array(“[email protected]”, “[email protected]”, “[email protected]”, “[email protected]”);usort($data, ‘sortByLen'); 
print_r($data); function sortByLen($a, $b) { 
if (strlen($a) == strlen($b)) { 
return 0; 
} else { 
return (strlen($a) > strlen($b)) ? 1 : -1; 


?> 


這樣,就創建了我們自己的比較函數,這個函數使用strlen()函數比較每一個字符串的個數,然后分別返回1,0或-1.這個返回值是決定元素排列的基礎。下面是它的輸出結果: 

復制代碼代碼如下:


Array ([0] => [email protected] 
[1] => [email protected] 
[2] => [email protected] 
[3] => [email protected] 


自然語言排序 
PHP有一個非常獨特的排序方式,這種方式使用認知而不是使用計算規則。這種特性稱為自然語言排序,當創建模糊邏輯應用軟件的時候這種排序方式非常有用。下面大家可以來看看它的一個簡單例子,如Listing G所示: 
Listing G 

復制代碼代碼如下:


<?php $data = array(“book-1″, “book-10″, “book-100″, “book-5″); sort($data);print_r($data); 
natsort($data); print_r($data);?> 


它的輸出結果如下: 

復制代碼代碼如下:


Array ([0] => book-1 
[1] => book-10 
[2] => book-100 
[3] => book-5 

Array 

[0] => book-1 
[3] => book-5 
[1] => book-10 
[2] => book-100 


它們的不同已經很清楚了:第二個排序結果更直觀,更“人性化”,然而第一個則更符合算法規則,更具“計算機”特點。 
自然語言能進行倒排嗎?答案是肯定的!只要對natsort()的結果使用array_reverse()函數就可以了,Listing H就是一個簡單例子: 
Listing H 

復制代碼代碼如下:


<?php $data = array(“book-1″, “book-10″, “book-100″, “book-5″);natsort($data); print_r(array_reverse($data)); 
?> 


下面是它的輸出結果: 

復制代碼代碼如下:


Array ([0] => book-100 
[1] => book-10 
[2] => book-5 
[3] => book-1 


根據用戶自定義的規則排序 
PHP也能讓你定義自己的排序算法,你可以通過創建你自己的比較函數,并把它傳遞給usort()函數。如果第一個參數比第二個參數“小”的話,比較函數必須返回一個比0小的數,如果第一參數比第二個參數“大”的話,比較函數應該返回一個比0大的數。 
Listing I就是這樣的一個例子,在這個例子中根據它們的長度對數組元素進行排序,最短的項放在最前面: 
Listing I 

復制代碼代碼如下:


<?php $data = array(“[email protected]”, “[email protected]”, “[email protected]”, “[email protected]”);usort($data, ‘sortByLen'); 
print_r($data); function sortByLen($a, $b) { 
if (strlen($a) == strlen($b)) { 
return 0; 
} else { 
return (strlen($a) > strlen($b)) ? 1 : -1; 


?> 


這樣,就創建了我們自己的比較函數,這個函數使用strlen()函數比較每一個字符串的個數,然后分別返回1,0或-1.這個返回值是決定元素排列的基礎。下面是它的輸出結果: 

復制代碼代碼如下:


Array ([0] => [email protected] 
[1] => [email protected] 
[2] => [email protected] 
[3] => [email protected] 


多維排序 
最后,PHP也允許在多維數組上執行一些比較復雜的排序——例如,首先對一個嵌套數組使用一個普通的關鍵字進行排序,然后再根據另一個關鍵字進行排序。這與使用SQL的ORDER BY語句對多個字段進行排序非常相似。為了能更好的明白它是如何工作的,請仔細看Listing J所舉的例子: 
Listing J 

復制代碼代碼如下:


<?php $data = array(array(“id” => 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數組中模擬了一個行和列數組。然后,我使用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 


array_multisort()函數是PHP中最有用的函數之一,它有非常廣泛的應用范圍。另外,就如你在例子中所看到的,它能對多個不相關的數組進行排序,也可以使用其中的一個元素作為下次排序的基礎,還可以對數據庫結果集進行排序。 
這些例子應該讓你對PHP中各種數組排序函數的使用有了初步的了解,也向你展示了一些隱藏在PHP數組處理工具包的內部功能。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产麻豆91网在线看 | 国产视频99 | 玩50岁四川熟女大白屁股直播 | 91碰| 桃乃木香奈ipx在线播放 | 日本性生活免费看 | 91精品啪在线观看国产老湿机 | 暖暖影院日本版 | 91四虎国自产在线播放线 | 久久综合久综合久久鬼色 | 性绞姿始动作动态图 | 男人资源站 | 亚洲国产AV一区二区三区四区 | 岛国a香蕉片不卡在线观看 荡女淫春2古装 | a免费看| 国产高清在线看 | 91精品天美精东蜜桃传媒免费 | 日本视频一区在线观看免费 | 好男人好资源在线观看 | 国产香蕉一区二区精品视频 | 欧美一区二区三区免费观看视频 | 久久久久久久99精品免费观看 | 国内精品久久久久影院嫩草 | 久久99热在线观看7 久久99精品涩AV毛片观看 | 午夜在线a亚洲v天堂网2019 | 91久久国产综合精品 | 免费毛片在线观看 | a级片在线播放 | 国产91区| 蜜桃视频在线观看www | 国产日韩欧美 | 免费看国产一级片 | 日本国产成人精品视频 | 色婷婷在线 | 青青草99热这里都是精品 | 国产成人福利免费观看 | 日本ssswww大学生 | 91麻豆精品 | 国产酒店自拍 | 色就色欧美综合偷拍区a | 热热99|