博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php表很长会坏,PHP – 多个uasort函数会破坏排序
阅读量:5106 次
发布时间:2019-06-13

本文共 1216 字,大约阅读时间需要 4 分钟。

更新

我最近在关于排序多维数组的“权威”主题中以更有能力的方式讨论了这个问题.您可以安全地跳过阅读本答复的其余部分,并直接点击链接以获得更强大的解决方案.

原始答案

函数uasort允许您定义自己的比较函数.只需将您想要的所有标准放入其中即可.

例如,按生日排序,然后按名称排序:

function comparer($first, $second) {

// First see if birthdays differ

if ($first['birthday'] < $second['birthday']) {

return -1;

}

else if ($first['birthday'] > $second['birthday']) {

return 1;

}

// OK, birthdays are equal. What else?

if ($first['name'] < $second['name']) {

return -1;

}

else if ($first['name'] > $second['name']) {

return 1;

}

// No more sort criteria. The two elements are equal.

return 0;

}

我忽略了这样一个事实:在你的例子中,生日的格式不能通过使用运算符

function make_comparer() {

$criteriaNames = func_get_args();

$comparer = function($first, $second) use ($criteriaNames) {

// Do we have anything to compare?

while(!empty($criteriaNames)) {

// What will we compare now?

$criterion = array_shift($criteriaNames);

// Do the actual comparison

if ($first[$criterion] < $second[$criterion]) {

return -1;

}

else if ($first[$criterion] > $second[$criterion]) {

return 1;

}

}

// Nothing more to compare with, so $first == $second

return 0;

};

return $comparer;

}

然后你可以这样做:

uasort($myArray, make_comparer('birthday', 'name'));

这个例子可能试图太聪明;一般来说,我不喜欢使用不接受名称参数的函数.但在这种情况下,使用场景是一个非常强大的理由,因为它过于聪明.

转载地址:http://mhudv.baihongyu.com/

你可能感兴趣的文章
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
[Data Structure & Algorithm] 有向无环图的拓扑排序及关键路径
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
遍历Map对象
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
python第九天课程:遇到了金角大王
查看>>