关于PHP中对数组的排序
2013-03-13 10:07
274 查看
本文来详细讲述下PHP中对于数组排序的方法,首先来讲述下PHP中的内置函数对数组进行的排序,这些内置函数有一些共性如下:
1. 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型。
2. 函数名中出现单a表示association,含义为,在按值排序的过程中,保持key=>value的对应关系不变
3. 函数名中出现单k表示key,含义为,在按值排序的过程中按照数组key而不是数组的值排序
4. 函数名中出现单r的表示reverse,含义为,按照跟不加r的相反的顺序排列
5. 函数名中出现单u的表示user-defined,含义为,使用用户自定义函数排序,如果函数的逻辑是参数1<参数2返回负数,则按照升序排列(p1小2返负升)。
注:本函数为数组中的单元赋予新的键名。原有的键名将被删除。
输出:
用户自定义的函数必须设计为返回 -1, 0, 或 1,并应该接受两个供比较的参数。
我们要注意的是对多个数据排序的时候,首先按第一个数组进行排序,第一个数组值相同的时候,才按第二个数组排序。数组的值总是对应的,具体看下面几个例子。
对多维数组排序的例子如下
1. 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型。
2. 函数名中出现单a表示association,含义为,在按值排序的过程中,保持key=>value的对应关系不变
3. 函数名中出现单k表示key,含义为,在按值排序的过程中按照数组key而不是数组的值排序
4. 函数名中出现单r的表示reverse,含义为,按照跟不加r的相反的顺序排列
5. 函数名中出现单u的表示user-defined,含义为,使用用户自定义函数排序,如果函数的逻辑是参数1<参数2返回负数,则按照升序排列(p1小2返负升)。
sort函数
sort() 函数按升序对给定数组的值排序。注:本函数为数组中的单元赋予新的键名。原有的键名将被删除。
<?php $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); sort($test); print_r($test); ?>
输出:
Array ( [0] => app [1] => bit [2] => class [3] => direct )
rsort函数
rsort() 函数对数组的元素按照键值进行逆向排序。与sort的用法基本相同。<?php $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); rsort($test); print_r($test); ?>输出:
Array ( [0] => direct [1] => class [2] => bit [3] => app )
asort函数
asort() 函数对数组进行排序并保持索引关系。<?php $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); asort($test); print_r($test); ?>输出:
Array ( [a] => app [b] => bit [c] => class [d] => direct )
arsort函数
arsort() 函数对数组进行逆向排序并保持索引关系。与asort的用法基本相同。<?php $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); arsort($test); print_r($test); ?>输出:
ray ( [d] => direct [c] => class [b] => bit [a] => app )
ksort函数
ksort() 函数按照键名对数组排序,为数组值保留原来的键。<?php $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); ksort($test); print_r($test); ?>输出:
Array ( [a] => app [b] => bit [c] => class [d] => direct )
krsort函数
krsort() 函数将数组按照键逆向排序,为数组值保留原来的键。与ksort的用法基本相同。<?php $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); krsort($test); print_r($test); ?>输出:
Array ( [d] => direct [c] => class [b] => bit [a] => app )
usort函数
usort() 函数使用用户自定义的函数对数组排序。用户自定义的函数必须设计为返回 -1, 0, 或 1,并应该接受两个供比较的参数。
<?php function my_sort($a, $b) { if ($a == $b) return 0; return ($a > $b) ? 1 : -1; } $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); usort($test, 'my_sort'); print_r($test); ?>输出:
Array ( [0] => app [1] => bit [2] => class [3] => direct )
uksort函数
uksort() 函数使用用户自定义的比较函数按照键名对数组排序,并保持索引关系。<?php function my_sort($a, $b) { if ($a == $b) return 0; return ($a > $b) ? 1 : -1; } $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); uksort($test, 'my_sort'); print_r($test); ?>输出:
Array ( [a] => app [b] => bit [c] => class [d] => direct )
uasort函数
uasort() 函数使用用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。<?php function my_sort($a, $b) { if ($a == $b) return 0; return ($a > $b) ? 1 : -1; } $test = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); uasort($test, 'my_sort'); print_r($test); ?>输出:
Array ( [a] => app [b] => bit [c] => class [d] => direct )
array_multisort函数
array_multisort() 函数对多个数组或多维数组进行排序。<?php $test1 = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); $test2 = array("r" => "class", "c" => "bit", "b" => "direct","v" => "app"); array_multisort($test1, $test2); print_r($test1); echo '<br />'; print_r($test2); ?>输出:
Array ( [a] => app [b] => bit [c] => class [d] => direct ) Array ( [v] => app [c] => bit [r] => class [b] => direct )
我们要注意的是对多个数据排序的时候,首先按第一个数组进行排序,第一个数组值相同的时候,才按第二个数组排序。数组的值总是对应的,具体看下面几个例子。
<?php $test1 = array("c" => "class", "b" => "bit", "d" => "direct","a" => "app"); $test2 = array("c" => "bit", "r" => "class", "b" => "direct","v" => "app"); array_multisort($test1, SORT_ASC, $test2, SORT_DESC); print_r($test1); echo '<br />'; print_r($test2); ?>输出:
Array ( [a] => app [b] => bit [c] => class [d] => direct ) Array ( [v] => app [r] => class [c] => bit [b] => direct )我们发现第二个数组的排序有点问题,没有按我们想要的进行,那是因为数组的对应关系。
<?php $test1 = array("c" => "class", "b" => "class", "d" => "direct","a" => "app"); $test2 = array("c" => "bit", "r" => "class", "b" => "direct","v" => "app"); array_multisort($test1, SORT_ASC, $test2, SORT_DESC); print_r($test1); echo '<br />'; print_r($test2); ?>输出:
Array ( [a] => app [b] => class [c] => class [d] => direct ) Array ( [v] => app [r] => class [c] => bit [b] => direct )由于第一个数组有相同的2个值的元素,所以这2个元素按照第2个数组的规则来排序,2个数组的对应关系始终才成立。
对多维数组排序的例子如下
<?php echo '<pre>'; $test = array(array("c" => 100, "b" => 52, "d" => 77,"a" => 105), array("c" => 32, "r" => 5, "b" => 49,"v" => 99)); print_r($test); array_multisort($test[0],$test[1]); print_r($test); ?>输出:
Array ( [0] => Array ( [c] => 100 [b] => 52 [d] => 77 [a] => 105 ) [1] => Array ( [c] => 32 [r] => 5 [b] => 49 [v] => 99 ) ) Array ( [0] => Array ( [b] => 52 [d] => 77 [c] => 100 [a] => 105 ) [1] => Array ( [r] => 5 [b] => 49 [c] => 32 [v] => 99 ) )
二维数组排序
function array_sort($arr,$keys,$type='asc'){ $keysvalue = $new_array = array(); foreach ($arr as $k=>$v){ $keysvalue[$k] = $v[$keys]; } if($type == 'asc'){ asort($keysvalue); }else{ arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k=>$v){ $new_array[$k] = $arr[$k]; } return $new_array; }
相关文章推荐
- php关于array_multisort多维数组排序的使用说明
- php关于array_multisort多维数组排序的使用说明
- 关于常见PHP数组排序方法总结
- PHP关于数组的四种基础排序
- 关于PHP数组及关联数组排序的函数讲解
- 关于PHP数组遍历对比测试
- php对数组排序
- PHP指定字段的多维数组排序方法
- PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
- PHP多维数组排序
- php不用内置函数对数组排序的两个算法代码
- PHP中关于数组的运算题
- php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
- 关于数组的排序问题(冒泡排序,选择排序,插入排序)
- PHP多维数组排序
- PHP数组吐血级操作方法(数组排序…
- PHP数组排序之sort、asort与ksort用法实例
- Android 面试题 关于数组排序问题
- PHP使用array_multisort对多个数组或多维数组进行排序
- OC学习之道:关于数组的四种排序