一些php数组排序函数示例总结

在php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php 自带的排序函数了,但多维数组时我们需要自己写了。

回来后一直在揪心啊,于是翻了一下书本查阅,给我知道了答案,为了记住它们,我决定来一个数组排序函数大总结。

首先接触的就是PHP数组排序、降序的排序问题。

sort:本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。 

rsort:本函数对数组进行逆向排序(最高到最低)。 删除原有的键名而不仅是重新排序。

asort:对数组进行排序并保持索引关系 

arsort:对数组进行逆向排序并保持索引关系

ksort:对数组按照键名排序,保留键名到数据的关联 

krsort:对数组按照键名逆向排序,保留键名到数据的关联

natsort:对字母数字字符串进行排序并保持原有键/值的关联 

natcasesort:同natsort排序算法,但不区分大小写字母排序

PHP 数组排序(sort) 

数字索引数组排序:

函数:sort(array, [sort type]) 

说明:sort()函数按升序对指定数组(第一个参数)进行排序。 

sort函数第二参数作用为指定排序类型,是可选参数.

SORT_REGULAR: 默认值,不改变类型进行排序; 

SORT_NUMERIC: 把值作为数字进行排序;

SORT_STRING: 把值作为字符串进行排序;

如数组中有4和”37″,按数字排序,4小于”37″;按字符串排序,4大于”37″;

一、一维数组

假设有一个一维数组,如下:

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

print_r()输出的原始数组结果为:

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

1.sort()函数:根据数组下标进行升序排列;

print_r()输出的数组结果为(输出时只有数组下标,而不是键名):

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

2.rsort()函数:与sort()函数相反,根据数组下标进行降序排列;

print_r()输出的数组结果为(输出时只有数组下标,而不是键名):

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

3.asort()函数:根据数组的键名进行升序排列;

print_r()输出的数组结果为:

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

4.arsort()函数:与asort()函数相反,根据数组的键名进行降序排列;

print_r()输出的数组结果为:

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

5.ksort()函数:根据数组的键值进行升序排列;

print_r()输出的数组结果为:

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

6.krsort()函数:与ksort()函数相反,根据数组的键值进行降序排列;

print_r()输出的数组结果为:

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

7.reverse_array()函数:反向当前的数组排列顺序;

print_r()输出的数组结果为:

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

8.shuffle()函数:随机地排列数组顺序(每次刷新后排列的顺序都不相同);

print_r()输出的数组结果为(只是其中一种随机排列):

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

二、二维数组

假设有一个二维数组,代码如下:

  1. $person = array
  2.  array("hiro""23""suzhou"), 
  3.  array("yoyo""25""shanghai"), 
  4.  array("janstar""28""xinjiang"
  5. );  
  6. //print_r()输出的原始数组结果为: 
  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 ) ) 

二维数组的排序是根据每维的键名排序的,所以需要额外地编写比较函数。先举三个例子:

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. * @数字数组排序 可按从大到小或从小到大排序   
  5. */ 
  6. function sortArray($array$choice) { 
  7.     $values = array_values($array); // 建立一个数字索引的数组 
  8.     $ch = $choice==0 ? min:max; // 参数$choice为0按从小到大排列,否则其他都默认为按从大到小 
  9.     do { 
  10.         $val = $ch($values); // 找出最大或最小值 
  11.         $key = array_search($val,$values); // 取得最大值的键名 
  12.         $result[$key] = $val// 将最大值存入新数组 
  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. ?> 
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 一些php数组排序函数示例总结

12 评论

  1. order azithromycin generic neurontin pills neurontin 100mg cost

  2. play roulette free for fun play casino online casino games win real money

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡