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()函数来自定义排序:

 /*
* 二维数组按指定键值排须
*/
function arr_sort($array,$key,$order="asc"){//asc是升序 desc是降序//按 I<L<M<H 排序 $arr_nums=$arr=array(); foreach($array as $k=>$v){ $arr_nums[$k]=$v[$key]; } if($order=='asc'){ uasort($arr_nums,'my_sort_asc'); }else{ uasort($arr_nums,'my_sort_desc'); } foreach($arr_nums as $k=>$v){ $arr[$k]=$array[$k]; } return $arr; }
function my_sort_desc($a,$b){
if($a==$b) return 0;
if($a=='I' && $b!='I') return 1;
if($a=='L' && $b!='I') return 1;
if($a=='L' && $b=='I') return -1;
if($a=='M' && $b!='H') return -1;
if($a=='M' && $b=='H') return 1;
if($a=='H' && $b!='H') return -1;
}
function my_sort_asc($a,$b){
if($a==$b) return 0;
if($a=='I' && $b!='I') return -1;
if($a=='L' && $b!='I') return -1;
if($a=='L' && $b=='I') return 1;
if($a=='M' && $b!='H') return 1;
if($a=='M' && $b=='H') return -1;
if($a=='H' && $b!='H') return 1;
}

三、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() 例子

 <?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
} $a = array(3, 2, 5, 6, 1); usort($a, "cmp"); foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>

以上例程会输出:

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

最新文章

  1. Python for Infomatics 第12章 网络编程六(译)
  2. HTML、CSS部分
  3. Service Provider模式
  4. java获取系统信息
  5. ie调试工具
  6. Python中用datetime包进行对时间的一些操作
  7. ArrayList总结
  8. python ssh
  9. [shell基础]——if/for/while/until/case 语句
  10. 第二百零七天 how can I坚持
  11. 导入已有的vmdk文件,发现网络无法连通
  12. 风行一时瀑布流网页布局,实现无限加载(jquery)
  13. WINHTTP的API接口说明
  14. java读取txt文件内容
  15. WPF项目学习.一
  16. Dynamics CRM2011 通过DeveloperToolkit在VS中部署遇到的问题
  17. DataPipeline |《Apache Kafka实战》作者胡夕:Apache Kafka监控与调优
  18. MT【201】折线计数
  19. 修改lastpass主密码后需重启firefox才能加载已保存的站点密码或用导入工具
  20. centos 安装php7、pecl 、swoole、redis拓展

热门文章

  1. 基于WebSphere与Domino的电子商务网站构架分析
  2. Linux库文件路径的添加
  3. BZOJ4817: [Sdoi2017]树点涂色(LCT)
  4. BZOJ2716: [Violet 3]天使玩偶(KD-Tree)
  5. Python Unittest模块测试执行
  6. Spring学习总结(6)——Spring之核心容器bean
  7. 从数据库中生成XML文件
  8. ArcGIS 10 影像、栅格数据格式批量转换
  9. [Vue + TS] Create your own Decorators in Vue with TypeScript
  10. Activity启动过程源代码分析