【问题标题】:PHP: descending asort doesn't work?PHP:降序排序不起作用?
【发布时间】:2014-05-06 17:47:23
【问题描述】:

我有这个网站使用数组,然后我有这个函数使用asort 对这些数组进行排序。它看起来像这样:

function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

此算法从 1-10 对数组进行排序,但我需要它从 10-1 降序排序。我试过使用rsort 没有运气,我也试过array_reverse 没有运气。不知道是不是我用错了?或者.. 至少我只需要算法来对它们进行降序排序。任何想法,意见或建议表示赞赏。谢谢!

【问题讨论】:

  • @AzizSaleh 他正在使用内置的asort。他的自定义函数有一个名字aasort
  • 你的阵列是什么样的? @ElmoVanKielmo 在我删除消息后看到了您的回复。你是对的,这是自定义排序。
  • 看看您的逻辑,将asort($sorter) 更改为arsort($sorter) 应该可行。如果不是,我们需要查看 $array 以了解为什么它不是。
  • 感谢@AzizSaleh,代码现在似乎可以正常工作了!

标签: php arrays sorting asort


【解决方案1】:

尝试usort,如文档所述,使用定义的排序函数。
http://www.php.net/manual/en/function.usort.php

function sortSomething($a, $b){
    if ($a < $b){
        return -1;
    }
    else if ($a > $b){
        return 1;
    }
    else{
        return 0;
    }
};
// Now sort the array using the comparison function
usort($array, 'sortSomething');

这以正常方式对元素进行排序 - 只需切换比较运算符,您将获得反向排序。

【讨论】:

  • 但是 usort 需要两个参数,如果我尝试使用它而不是 aasort,它会说我无法重新声明它。
  • 天哪。当然它需要两个参数!一个是要排序的数组,第二个是比较两个元素的函数的名称,如果第一个元素小于第二个元素,则返回 -1,如果第一个元素大于第二个元素,则返回 1,如果它们是则返回 0平等的。在所有语言中都是一样的。唯一的 PHP 怪异之处在于它将比较函数名称作为字符串而不是函数实例。你不明白吗?
  • 是的,但是我必须创建这样一个函数才能下降它吗?
  • 这是个问题吗?这只是几行代码。
  • 很高兴听到这个消息。我认为您的排序逻辑可能有点复杂,即基于数组元素的某些属性。不过,如果您不想接受我的回答,请稍加点赞:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
相关资源
最近更新 更多