php自定义排序数组usort和uasort(uasort保持索引关联)(usort($arr, "cmp");)(比较函数时很普通函数的写法:function cmp($a, $b))
2024-08-31 16:58:49
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 的整数。
范例¶
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
最新文章
- Python for Infomatics 第12章 网络编程六(译)
- HTML、CSS部分
- Service Provider模式
- java获取系统信息
- ie调试工具
- Python中用datetime包进行对时间的一些操作
- ArrayList总结
- python ssh
- [shell基础]——if/for/while/until/case 语句
- 第二百零七天 how can I坚持
- 导入已有的vmdk文件,发现网络无法连通
- 风行一时瀑布流网页布局,实现无限加载(jquery)
- WINHTTP的API接口说明
- java读取txt文件内容
- WPF项目学习.一
- Dynamics CRM2011 通过DeveloperToolkit在VS中部署遇到的问题
- DataPipeline |《Apache Kafka实战》作者胡夕:Apache Kafka监控与调优
- MT【201】折线计数
- 修改lastpass主密码后需重启firefox才能加载已保存的站点密码或用导入工具
- centos 安装php7、pecl 、swoole、redis拓展
热门文章
- 基于WebSphere与Domino的电子商务网站构架分析
- Linux库文件路径的添加
- BZOJ4817: [Sdoi2017]树点涂色(LCT)
- BZOJ2716: [Violet 3]天使玩偶(KD-Tree)
- Python Unittest模块测试执行
- Spring学习总结(6)——Spring之核心容器bean
- 从数据库中生成XML文件
- ArcGIS 10 影像、栅格数据格式批量转换
- [Vue + TS] Create your own Decorators in Vue with TypeScript
- Activity启动过程源代码分析