亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php多維數組的排序方式

2024-09-04 11:46:35
字體:
來源:轉載
供稿:網友

php多維數組的排序方式與單數組會有一些不同了同時在不同版本中也有不同的函數了,下面小編整理了一自己在使用php中整理的一些關于php多維數組的排序例子,希望這些例子可以對各位有幫助。

例如我有一個多維數組$relationshop_list,其中有id,與sort兩列,我希望數組按照id降序,sort降序的方式排列:

  1.  //排序 
  2. $array_field = array_column($relationshop_list,'sort'); //提出sort列 
  3. $array_id = array_column($relationshop_list,'id');      //提出id列 
  4. array_multisort($array_field,SORT_DESC,$array_id,SORT_DESC,$relationshop_list); 

注意:array_column是php5.5新增的方法

array_multisort方法實現,但是如果是多維數組,并且我們要指定數組中的某個字段進行排序,那么這就需要我們自己寫方法實現了。本文分享了一段PHP指定字段的多維數組排序方法的代碼,這段代碼可實現根據field字段對數組進行排序。

  1. function sortArrByField(&$array$field$desc = false){ 
  2.   $fieldArr = array(); 
  3.   foreach ($array as $k => $v) { 
  4.     $fieldArr[$k] = $v[$field]; 
  5.   } 
  6.   $sort = $desc == false ? SORT_ASC : SORT_DESC; 
  7.   array_multisort($fieldArr$sort$array); 

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。

簡單排序

首先,讓我們來看看最簡單的情況:將一個數組元素從低到高進行簡單排序,這個函數既可以按數字大小排列也可以按字母順序排列。PHP的sort()函數實現了這個功能,如Listing A所示:

Listing A

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

輸出結果如下所示:

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

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

Listing B

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

它的輸出結果如下:

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

根據關鍵字排序

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

Listing C就是一個例子:

Listing C

  1. <?php $data = array("US" => "United States""IN" => "India""DE" => "Germany""ES" => "Spain");ksort($data); print_r($data); 
  2. ?> 

它的輸出結果如下:

  1. Array ([DE] => Germany 
  2. [ES] => Spain 
  3. [IN] => India 
  4. [US] => United States 

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

Listing D

  1. <?php $data = array("US" => "United States""IN" => "India""DE" => "Germany""ES" => "Spain");krsort($data); print_r($data); 
  2. ?> 

它的輸出結果如下:

  1. Array ([US] => United States 
  2. [IN] => India 
  3. [ES] => Spain 
  4. [DE] => Germany 

根據值排序

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

Listing E

  1. <?php $data = array("US" => "United States""IN" => "India""DE" => "Germany""ES" => "Spain");asort($data); print_r($data); 
  2. ?> 

下面就是它的輸出結果。請注意這個結果與上面使用ksort()函數所得到的結果的不同——在這兩種情況中,都是按字母順序進行排序的,但是它們是根據數組的不同字段進行排序的。

同時,請注意關鍵字-值之間的聯系會始終保持;它只是關鍵字-值對排序后的一種方式,排序并不會改變它們的對應關系。

  1. Array ([DE] => Germany 
  2. [IN] => India 
  3. [ES] => Spain 
  4. [US] => United States 

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

Listing F

  1. <?php $data = array("US" => "United States""IN" => "India""DE" => "Germany""ES" => "Spain");arsort($data); print_r($data); 
  2. ?> 

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

  1. Array ([US] => United States 
  2. [ES] => Spain 
  3. [IN] => India 
  4. [DE] => Germany 

自然語言排序

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

Listing G

  1. <?php $data = array("book-1""book-10""book-100""book-5"); sort($data);print_r($data); 
  2. natsort($data); print_r($data);?> 

它的輸出結果如下:

  1. Array ([0] => book-1 
  2. [1] => book-10 
  3. [2] => book-100 
  4. [3] => book-5 
  5. Array 
  6. [0] => book-1 
  7. [3] => book-5 
  8. [1] => book-10 
  9. [2] => book-100 

它們的不同已經很清楚了:第二個排序結果更直觀,更“人性化”,然而第一個則更符合算法規則,更具“計算機”特點。

自然語言能進行倒排嗎?答案是肯定的!只要對natsort()的結果使用array_reverse()函數就可以了,Listing H就是一個簡單例子:

Listing H

  1. <?php $data = array("book-1""book-10""book-100""book-5");natsort($data); print_r(array_reverse($data)); 
  2. ?> 

下面是它的輸出結果:

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

根據用戶自定義的規則排序

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

Listing I

  1. <?php $data = array("joe@""@""asmithsonian@""jay@");usort($data'sortByLen'); 
  2. print_r($data); function sortByLen($a$b) { 
  3. if (strlen($a) == strlen($b)) { 
  4. return 0; 
  5. else { 
  6. return (strlen($a) > strlen($b)) ? 1 : -1; 
  7. //Vevb.com 

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

  1. Array ([0] => jay@ 
  2. [1] => joe@ 
  3. [2] => @ 
  4. [3] => asmithsonian@ 

自然語言排序

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

Listing G

  1. <?php $data = array("book-1""book-10""book-100""book-5"); sort($data);print_r($data); 
  2. natsort($data); print_r($data);?> 

它的輸出結果如下:

  1. Array ([0] => book-1 
  2. [1] => book-10 
  3. [2] => book-100 
  4. [3] => book-5 
  5. Array 
  6. [0] => book-1 
  7. [3] => book-5 
  8. [1] => book-10 
  9. [2] => book-100 

它們的不同已經很清楚了:第二個排序結果更直觀,更“人性化”,然而第一個則更符合算法規則,更具“計算機”特點。

自然語言能進行倒排嗎?答案是肯定的!只要對natsort()的結果使用

array_reverse()函數就可以了,Listing H就是一個簡單例子:

Listing H

  1. <?php $data = array("book-1""book-10""book-100""book-5");natsort($data); print_r(array_reverse($data)); 
  2. ?> 

下面是它的輸出結果:

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

根據用戶自定義的規則排序

PHP也能讓你定義自己的排序算法,你可以通過創建你自己的比較函數,并把它傳遞給usort()函數。如果第一個參數比第二個參數“小”的話,比較函數必須返回一個比0小的數,如果第一參數比第二個參數“大”的話,比較函數應該返回一個比0大的數。

Listing I就是這樣的一個例子,在這個例子中根據它們的長度對數組元素進行排序,最短的項放在最前面:

Listing I

  1. <?php $data = array("joe@""@""asmithsonian@""jay@");usort($data'sortByLen'); 
  2. print_r($data); function sortByLen($a$b) { 
  3. if (strlen($a) == strlen($b)) { 
  4. return 0; 
  5. else { 
  6. return (strlen($a) > strlen($b)) ? 1 : -1; 
  7. ?> 

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

  1. Array ([0] => jay@ 
  2. [1] => joe@ 
  3. [2] => @ 
  4. [3] => asmithsonian@ 

多維排序

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

Listing J

  1. <?php $data = array(array("id" => 1, "name" => "Boney M""rating" => 3), 
  2. array("id" => 2, "name" => "Take That""rating" => 1), 
  3. array("id" => 3, "name" => "The Killers""rating" => 4), 
  4. array("id" => 4, "name" => "Lusain""rating" => 3), 
  5. ); foreach ($data as $key => $value) { 
  6. $name[$key] = $value['name']; 
  7. $rating[$key] = $value['rating']; 
  8. //Vevb.com 
  9. array_multisort($rating$name$data); print_r($data);?> 

這里,我們在$data數組中模擬了一個行和列數組。然后,我使用array_multisort()函數對數據集合進行重排,首先是根據rating進行排序,然后,如果rating相等的話,再根據name排序。它的輸出結果如下:

  1. Array ([0] => Array 
  2. [id] => 2 
  3. [name] => Take That 
  4. [rating] => 1 
  5. ) [1] => Array 
  6. [id] => 1 
  7. [name] => Boney M 
  8. [rating] => 3 
  9. [2] => Array 
  10. [id] => 4 
  11. [name] => Lusain 
  12. [rating] => 3 
  13. [3] => Array 
  14. [id] => 3 
  15. [name] => The Killers 
  16. [rating] => 4 

array_multisort()函數是PHP中最有用的函數之一,它有非常廣泛的應用范圍。另外,就如你在例子中所看到的,它能對多個不相關的數組進行排序,也可以使用其中的一個元素作為下次排序的基礎,還可以對數據庫結果集進行排序。

這些例子應該讓你對PHP中各種數組排序函數的使用有了初步的了解,也向你展示了一些隱藏在PHP數組處理工具包的內部功能。

以上就是PHP指定字段的多維數組排序方法,希望這段PHP代碼對你帶來幫助

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲春色中文字幕| 欧美另类第一页| 蜜臀久久99精品久久久无需会员| 欧美日韩精品在线视频| 亚洲精品白浆高清久久久久久| 在线观看久久av| 97超级碰碰碰| 亚洲高清福利视频| 欧美在线观看www| 97超视频免费观看| 欧美日产国产成人免费图片| 97在线免费观看视频| 国产精品jizz在线观看麻豆| 亚洲欧美中文日韩在线| 欧美在线观看www| 久久久噜噜噜久噜久久| 在线观看欧美日韩| 久久精品夜夜夜夜夜久久| 国产精品扒开腿做爽爽爽男男| 国产日韩在线精品av| 国产日产久久高清欧美一区| 国产精品影院在线观看| 国产成人自拍视频在线观看| 在线激情影院一区| 欧美精品一二区| 国产精品久久9| 日韩欧亚中文在线| 3344国产精品免费看| 26uuu另类亚洲欧美日本一| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧美中文日韩v在线观看| 一区二区福利视频| 成人性生交大片免费看视频直播| 亚洲无限乱码一二三四麻| 欧美极品少妇与黑人| 亚洲欧美日韩国产精品| 亚洲一区二区三区成人在线视频精品| 精品国产乱码久久久久久虫虫漫画| 992tv在线成人免费观看| 一本色道久久综合亚洲精品小说| 国产精品美女网站| 亚洲自拍欧美另类| 欧美精品在线免费观看| 91深夜福利视频| 亚洲人成在线播放| 亚洲女性裸体视频| 亚洲国产一区二区三区四区| 欧美电影在线观看| 欧美激情精品久久久久久黑人| 欧美日韩国内自拍| 久久久久久久香蕉网| 久久久久久久久久婷婷| 午夜伦理精品一区| 国产精品久久久久久久久粉嫩av| 久久久人成影片一区二区三区| 精品国产电影一区| 亚洲精品成人av| 亚洲国产精品va在看黑人| 国产成人精品午夜| 丝袜美腿亚洲一区二区| 正在播放亚洲1区| 亚洲国产成人久久综合一区| 久久精品夜夜夜夜夜久久| 国产精品自拍偷拍视频| 欧美高清在线视频观看不卡| 91嫩草在线视频| 欧美色视频日本高清在线观看| 尤物yw午夜国产精品视频明星| 亚洲xxxxx电影| 亚洲精品国产欧美| 亚洲码在线观看| 午夜精品国产精品大乳美女| 欧美精品手机在线| 夜夜嗨av色一区二区不卡| 岛国视频午夜一区免费在线观看| 欧美电影免费观看高清| 欧美视频一二三| 欧美大全免费观看电视剧大泉洋| 九色91av视频| 国产精品永久免费观看| 日韩免费观看在线观看| 欧美成人性生活| 国产精品综合不卡av| 亚洲直播在线一区| 精品色蜜蜜精品视频在线观看| 亚洲精品小视频在线观看| 欧美日韩不卡合集视频| 91香蕉电影院| 日韩中文综合网| 国产日韩精品在线观看| 日韩av有码在线| 欧美性高潮床叫视频| 久久久精品视频在线观看| 中文字幕亚洲一区在线观看| 欧美裸体男粗大视频在线观看| 国产成人aa精品一区在线播放| 国产成人精彩在线视频九色| 国产97免费视| 欧洲永久精品大片ww免费漫画| 欧美成人高清视频| 国外成人在线播放| 亚洲白拍色综合图区| 久久97精品久久久久久久不卡| 欧美一区二区色| 亚洲自拍偷拍网址| 97精品一区二区视频在线观看| 日本精品视频网站| 中文字幕日韩免费视频| 欧美久久精品午夜青青大伊人| 亚洲字幕一区二区| 国产丝袜一区视频在线观看| 亚洲精品91美女久久久久久久| 国产自产女人91一区在线观看| 欧美激情xxxxx| 久久精品99国产精品酒店日本| 日韩大陆毛片av| 欧美日韩福利电影| 久久伊人免费视频| 中文字幕一精品亚洲无线一区| 宅男66日本亚洲欧美视频| 欧美午夜影院在线视频| 欧洲亚洲在线视频| 欧美精品激情视频| 中文字幕日韩在线视频| 亚洲va码欧洲m码| 国产99久久精品一区二区永久免费| 亚洲人成电影网站色www| 色一区av在线| 欧美人成在线视频| 日本国产欧美一区二区三区| 久久久噜噜噜久久| 国产www精品| 最新国产精品亚洲| 欧美国产日本高清在线| 色中色综合影院手机版在线观看| 2024亚洲男人天堂| 日韩欧美国产激情| 国产精品高潮在线| 国产91精品网站| 尤物yw午夜国产精品视频| 一级做a爰片久久毛片美女图片| 久久久久久久久91| 一本色道久久88综合日韩精品| 91中文字幕一区| 91亚洲精华国产精华| 日韩精品在线视频观看| 久久精品中文字幕一区| 久久99久久久久久久噜噜| 欧美电影免费观看电视剧大全| 中文字幕一区电影| 国产亚洲精品va在线观看| 久久精品国产成人精品| 精品国内产的精品视频在线观看| 久久精品视频中文字幕| 91九色视频在线| 一区二区三区四区在线观看视频| 欧美日韩国产丝袜美女| 欧美国产高跟鞋裸体秀xxxhd| 精品亚洲国产成av人片传媒| 亚洲国产美女久久久久| 成人激情视频免费在线| 国产在线精品自拍| 91精品国产色综合久久不卡98口| 国产99视频在线观看|