多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > php教程 > 一些php數(shù)組排序函數(shù)示例總結

一些php數(shù)組排序函數(shù)示例總結

來源:程序員人生   發(fā)布時間:2013-10-19 01:26:10 閱讀次數(shù):3237次

在php中數(shù)組排序有很多函數(shù)可以實現(xiàn)的,如果是簡單的一維數(shù)組排序我們可以使用php 自帶的排序函數(shù)了,但多維數(shù)組時我們需要自己寫了。

回來后一直在揪心啊,于是翻了一下書本查閱,給我知道了答案,為了記住它們,我決定來一個數(shù)組排序函數(shù)大總結。

首先接觸的就是PHP數(shù)組排序、降序的排序問題。

sort:本函數(shù)為 array 中的單元賦予新的鍵名。這將刪除原有的鍵名而不僅是重新排序。 

rsort:本函數(shù)對數(shù)組進行逆向排序(最高到最低)。 刪除原有的鍵名而不僅是重新排序。

asort:對數(shù)組進行排序并保持索引關系 

arsort:對數(shù)組進行逆向排序并保持索引關系

ksort:對數(shù)組按照鍵名排序,保留鍵名到數(shù)據(jù)的關聯(lián) 

krsort:對數(shù)組按照鍵名逆向排序,保留鍵名到數(shù)據(jù)的關聯(lián)

natsort:對字母數(shù)字字符串進行排序并保持原有鍵/值的關聯(lián) 

natcasesort:同natsort排序算法,但不區(qū)分大小寫字母排序

PHP 數(shù)組排序(sort) 

數(shù)字索引數(shù)組排序:

函數(shù):sort(array, [sort type]) 

說明:sort()函數(shù)按升序對指定數(shù)組(第一個參數(shù))進行排序。 

sort函數(shù)第二參數(shù)作用為指定排序類型,是可選參數(shù).

SORT_REGULAR: 默認值,不改變類型進行排序; 

SORT_NUMERIC: 把值作為數(shù)字進行排序;

SORT_STRING: 把值作為字符串進行排序;

如數(shù)組中有4和”37″,按數(shù)字排序,4小于”37″;按字符串排序,4大于”37″;

一、一維數(shù)組

假設有一個一維數(shù)組,如下:

$sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051"); 

print_r()輸出的原始數(shù)組結果為:

Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

1.sort()函數(shù):根據(jù)數(shù)組下標進行升序排列;

print_r()輸出的數(shù)組結果為(輸出時只有數(shù)組下標,而不是鍵名):

Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

2.rsort()函數(shù):與sort()函數(shù)相反,根據(jù)數(shù)組下標進行降序排列;

print_r()輸出的數(shù)組結果為(輸出時只有數(shù)組下標,而不是鍵名):

Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )

3.asort()函數(shù):根據(jù)數(shù)組的鍵名進行升序排列;

print_r()輸出的數(shù)組結果為:

Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )

4.arsort()函數(shù):與asort()函數(shù)相反,根據(jù)數(shù)組的鍵名進行降序排列;

print_r()輸出的數(shù)組結果為:

Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

5.ksort()函數(shù):根據(jù)數(shù)組的鍵值進行升序排列;

print_r()輸出的數(shù)組結果為:

Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )

6.krsort()函數(shù):與ksort()函數(shù)相反,根據(jù)數(shù)組的鍵值進行降序排列;

print_r()輸出的數(shù)組結果為:

Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

7.reverse_array()函數(shù):反向當前的數(shù)組排列順序;

print_r()輸出的數(shù)組結果為:

Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

8.shuffle()函數(shù):隨機地排列數(shù)組順序(每次刷新后排列的順序都不相同);

print_r()輸出的數(shù)組結果為(只是其中一種隨機排列):

Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

二、二維數(shù)組

假設有一個二維數(shù)組,代碼如下:

  1. $person = array
  2.  array("hiro""23""suzhou"), 
  3.  array("yoyo""25""shanghai"), 
  4.  array("janstar""28""xinjiang"
  5. );  
  6. //print_r()輸出的原始數(shù)組結果為: 
  7.  Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) ) 

二維數(shù)組的排序是根據(jù)每維的鍵名排序的,所以需要額外地編寫比較函數(shù)。先舉三個例子:

1.按每維的第一個元素升序排列,代碼如下:

  1. function compare0($x$y) { 
  2.  if($x[0] == $t[0]) { 
  3.   return 0; 
  4.  } elseif ($x[0] < $y[0]) { 
  5.   return -1; 
  6.  } else { 
  7.   return 1; 
  8.  } 
  9.  
  10. usort($person, compare0); 
  11. echo "按第一個元素正向排序:"
  12. print_r($person);  
  13. //輸出的結果如下: 
  14.  按第一個元素正向排序:Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) ) 

2.按每維的第三個元素升序排列,代碼如下:

  1. function compare2($x$y) { 
  2.  if($x[2] == $t[2]) { 
  3.   return 0; 
  4.  } elseif ($x[2] < $y[2]) { 
  5.   return -1; 
  6.  } else { 
  7.   return 1; 
  8.  } 
  9.  
  10. usort($person, compare2); 
  11. echo "按第三個元素正向排序:"
  12. print_r($person);  
  13. 輸出的結果如下: 
  14.  
  15.  按第三個元素正向排序:Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) ) 

3.按每維的第三個元素升序排列,代碼如下:

  1. function reverse_compare2($x$y) { 
  2.  if($x[2] == $t[2]) { 
  3.   return 0; 
  4.  } elseif ($x[2] < $y[2]) { 
  5.   return 1; //改變后即可反向 
  6.  } else { 
  7.   return -1; //改變后即可反向 
  8.  } 
  9.  
  10. usort($person, reverse_compare2); 
  11. echo "按第三個元素反向排序:"
  12. print_r($person);  
  13. //輸出的結果如下:1 
  14. //按第三個元素反向排序: 
  15. Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) ) 

呵呵,是不是代碼多了點,記下了以后方便查閱啊!

例代碼如下:

  1. <?php 
  2. error_reporting(0); 
  3. /** 
  4. * @數(shù)字數(shù)組排序 可按從大到小或從小到大排序   
  5. */ 
  6. function sortArray($array$choice) { 
  7.     $values = array_values($array); // 建立一個數(shù)字索引的數(shù)組 
  8.     $ch = $choice==0 ? min:max; // 參數(shù)$choice為0按從小到大排列,否則其他都默認為按從大到小 
  9.     do { 
  10.         $val = $ch($values); // 找出最大或最小值 
  11.         $key = array_search($val,$values); // 取得最大值的鍵名 
  12.         $result[$key] = $val// 將最大值存入新數(shù)組 
  13.         unset($values[$key]); 
  14.     } while (count($values) > 0); 
  15.     return $result
  16. $array = array(100, 1000, 1, 10000); 
  17. //$array = sortArray($array, 0); 
  18. $array = sortArray($array, 1); 
  19. foreach($array as $a) { 
  20.     echo "$a "
  21. ?> 
生活不易,碼農辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩亚洲欧美综合一区二区三区 | 亚洲蜜桃| 正在播放国产露脸做 | 亚洲综合射 | 亚洲欧美大片 | 大香伊人网| 精品自在线 | 三级做爰大爽长视频在线观看 | 国产xxxxxx久色视频在 | 国产午夜免费一区二区三区 | 国产欧美久久一区二区 | 中国欧美一级毛片免费 | 91久久偷偷做嫩草影院免费看 | 久久国产精品久久久久久 | 伊人久久大香线蕉75 | 波多野结衣精品一区二区三区 | 男女爱爱免费网站视频在线观看 | 亚洲综合二区 | 欧美一区二区影院 | 亚洲国产成人资源在线软件 | 欧美jizz40性欧美 | 色综合欧美综合天天综合 | 黑人性xx| 欧美一级h| 午夜视频在线观看网站 | 日韩一区二区三区四区五区 | 欧美第四色 | 国久久| xxxx.欧美| 亚洲欧美视频在线观看 | 亚洲国产成人久久综合一区 | 一级毛片免费视频观看 | 国产高清1024永久免费 | 另类最猛性xxxxx | 亚洲精品成人中文网 | 日韩亚洲色图 | 欧美一级大黄特黄毛片视频 | 亚洲欧美国产一区二区三区 | 亚洲国产精品久久日 | 成人免费视频一区 | 欧洲自拍 |