php 数组排序各种方法总结

在php中数组排序函数有很多很多,下面我来给各位朋友总结我们常用到的一些数组排序函数与用户自己写的数组排序实例.

数组排序最常用的函数就是 sort($arr); 它的作用是按数组的键值升序排列,并且排序后的数组键名不再是原来的键名,是按新数组来重新设置的键名。

而有时我们要求更复杂的排序。如按键名排序,这里用到 ksort($arr); 函数,它会根据数组的键名排序,并维持原有的键值关系。相对应的 asort($arr); 函数,是按键值排序,且维持原有的键值关系。

同样原理,rsort(); arsort(); krsort(); 函数除了排序是按降序排列外,其它与sort(); rsort(); ksort(); 相同。

数组操作是PHP很重要的基础,希望能好好运用。

按键值排序,即按标识符ASCⅡ码值的大小排列顺序。

ksort(): 按照数组标识符顺序排列

krsort(): 按照数组标识符逆序排

实例1,代码如下:

  1. <?php
  2. $languages=array(
  3. 'c'=>'php',
  4. 'd'=>'asp',
  5. 'a'=>'jsp',
  6. 'b'=>'java'
  7. );
  8. krsort($languages);
  9. foreach($languages as $key=>$val){
  10. echo "$key = $val".'<br>';
  11. };
  12. ?>

按元素值排序

asort(): 按照由小到大的顺序对数组排序;

rsort(): 按照由大到小的顺序对数组逆序排序。

将实例1的8-11行代码改为:

  1. asort($languages);
  2. print_r($languages);
  3. echo "<br>";
  4. rsort($languages);
  5. print_r($languages);

删除原有键名排序

sort(): 按照由小到大的顺序对数组排序;

rsort(): 按照由大到小的顺序对数组逆序排序。

将实例2的8-11行代码改为:

  1. sort($languages);
  2. foreach($languages as $key=>$val){
  3. echo "languages[$key] = $val".'<br>';
  4. };

array_multisort -- 对多个数组或多维数组进行排序

说明:bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )

例子1.对多个数组排序,代码如下:

  1. <?php
  2. $ar1 = array("10", 100, 100, "a");
  3. $ar2 = array(1, 3, "2", 1);
  4. array_multisort($ar1, $ar2);
  5. var_dump($ar1);
  6. var_dump($ar2);
  7. ?>

本例中经过排序后,第一个数组将包含 "10","a",100,100。第二个数组将包含 1,1,"2",3。第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致,代码如下:

  1. array(4) {
  2. [0]=> string(2) "10"
  3. [1]=> string(1) "a"
  4. [2]=> int(100)
  5. [3]=> int(100)
  6. }
  7. array(4) {
  8. [0]=> int(1)
  9. [1]=> int(1)
  10. [2]=> string(1) "2"
  11. [3]=> int(3)
  12. }

例子2,对多维数组排序,代码如下:

  1. <?php
  2. $ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1));
  3. array_multisort ($ar[0], SORT_ASC, SORT_STRING,
  4. $ar[1], SORT_NUMERIC, SORT_DESC);
  5. ?>
本例中经过排序后,第一个数组将包含 10,100,100,"a"(作为字符串上升排序),第二个数组将包含 1,3,"2",1(作为数值下降排序)

PHP数组排序函数很多,也很强大,如:arsort,asort,krsort,ksort,sort…,但有时候还是满足不了我们的需求,假如有一个二维数组,我们要按二维数组中的一个值来排序,就需要用到了usort自定义数组排序,例子如下:

  1. <?php
  2. $aa = array (array ("score"=>60),
  3. array ("score"=>70),
  4. array ("score"=>80),
  5. array ("score"=>90),
  6. array ("score"=>20),
  7. array ("score"=>10),
  8. array ("score"=>50),
  9. array ("score"=>30));
  10. echo '------排序前输出------<br />';
  11. var_dump($aa); // 排序前输出
  12. usort($aa, "cmp"); // 排序处理(从大到小)
  13. echo '<br />------排序后输出------<br />';
  14. var_dump($aa); // 排序完输出
  15. /**
  16. * 自定义排序条件
  17. * @param array $a
  18. * @param array $b
  19. * @return bool
  20. */
  21. function cmp($a, $b) {
  22. if ($a["score"] == $b["score"]) {
  23. return 0;
  24. }
  25. return ($a["score"] < $b["score"]) ? 1 : -1;
  26. }
  27. ?>

输出结果:

------排序前输出------

array(8) { [0]=> array(1) { ["score"]=> int(60) }
[1]=> array(1) { ["score"]=> int(70) }
[2]=> array(1) { ["score"]=> int(80) }
[3]=> array(1) { ["score"]=> int(90) }
[4]=> array(1) { ["score"]=> int(20) }
[5]=> array(1) { ["score"]=> int(10) }
[6]=> array(1) { ["score"]=> int(50) }
[7]=> array(1) { ["score"]=> int(30) } }

------排序后输出------

array(8) { [0]=> array(1) { ["score"]=> int(90) }
[1]=> array(1) { ["score"]=> int(80) }
[2]=> array(1) { ["score"]=> int(70) }
[3]=> array(1) { ["score"]=> int(60) }
[4]=> array(1) { ["score"]=> int(50) }
[5]=> array(1) { ["score"]=> int(30) }
[6]=> array(1) { ["score"]=> int(20) }
[7]=> array(1) { ["score"]=> int(10) } }