本文共 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/