微信扫一扫打赏支持

php自定义排序数组usort和uasort(uasort保持索引关联)(usort($arr, "cmp");)(比较函数时很普通函数的写法:function cmp($a, $b))

php自定义排序数组usort和uasort(uasort保持索引关联)(usort($arr, "cmp");)(比较函数时很普通函数的写法:function cmp($a, $b)

一、总结

1、uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联uasort($arr_nums,'my_sort_asc');

2、usort — 使用用户自定义的比较函数对数组中的值进行排序:usort($a, "cmp");

3、比较函数时很普通函数的写法:function cmp($a, $b)

 

二、php自定义排序数组uasort

项目需要风险排序,按 I(安全)<L(低风险)<M(中风险)<H(高风险) 的级别来排序

由于H排在I的前面,所以不能直接用sort来排序,要自定义。

用uasort()函数来自定义排序:

 1 /*
 2  * 二维数组按指定键值排须
 3  */
 4 function arr_sort($array,$key,$order="asc"){//asc是升序 desc是降序//按 I<L<M<H 排序
 5 
 6     $arr_nums=$arr=array();
 7 
 8     foreach($array as $k=>$v){
 9 
10         $arr_nums[$k]=$v[$key];
11 
12     }
13 
14     if($order=='asc'){
15 
16         uasort($arr_nums,'my_sort_asc');
17 
18     }else{
19 
20         uasort($arr_nums,'my_sort_desc');
21 
22     }
23 
24     foreach($arr_nums as $k=>$v){
25 
26         $arr[$k]=$array[$k];
27 
28     }
29 
30     return $arr;
31 
32 }
33 function my_sort_desc($a,$b){
34     if($a==$b) return 0;
35     if($a=='I' && $b!='I') return 1;
36     if($a=='L' && $b!='I') return 1;
37     if($a=='L' && $b=='I') return -1;
38     if($a=='M' && $b!='H') return -1;
39     if($a=='M' && $b=='H') return 1;
40     if($a=='H' && $b!='H') return -1;
41 }
42 function my_sort_asc($a,$b){
43     if($a==$b) return 0;
44     if($a=='I' && $b!='I') return -1;
45     if($a=='L' && $b!='I') return -1;
46     if($a=='L' && $b=='I') return 1;
47     if($a=='M' && $b!='H') return 1;
48     if($a=='M' && $b=='H') return -1;
49     if($a=='H' && $b!='H') return 1;
50 }

 

三、php usort自定义排序

说明 ¶

usort — 使用用户自定义的比较函数对数组中的值进行排序

bool usort ( array &$array , callable $value_compare_func )

 

Note此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

参数 ¶

array

输入的数组

cmp_function

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

int callback ( mixed $amixed $b )

范例 ¶

Example #1 usort() 例子

 1 <?php
 2 function cmp($a, $b)
 3 {
 4     if ($a == $b) {
 5         return 0;
 6     }
 7     return ($a < $b) ? -1 : 1;
 8 }
 9 
10 $a = array(3, 2, 5, 6, 1);
11 
12 usort($a, "cmp");
13 
14 foreach ($a as $key => $value) {
15     echo "$key: $value\n";
16 }
17 ?>

以上例程会输出:

0: 1
1: 2
2: 3
3: 5
4: 6

 

 

posted @ 2018-05-26 23:48  范仁义  阅读(711)  评论(0编辑  收藏  举报