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 的整数。
范例 ¶
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 "; 16 } 17 ?>
以上例程会输出:
0: 1 1: 2 2: 3 3: 5 4: 6