【问题标题】:sort array by keys and reverse the result按键排序数组并反转结果
【发布时间】:2012-10-09 17:06:50
【问题描述】:

我有一个这样的数组:

$array = array(
   [1]=>'something',
   [0.2]=>'something',
   [0.1]=>'something',
   [0.3]=>'something',
   [0.10]=>'something'
);

现在我喜欢按键排序这个数组,所以我使用这个代码:

uksort($array, 'strnatcasecmp');

上面的代码工作正常,但唯一的问题是我想反转结果。 为此,我在uksort 之后使用了krsortarray_reversersort,但它们都改变了uksort 的结果。

那么我可以按自然顺序按键对这个数组进行排序并反转结果吗?

我想要的应该是这样的:

$array = array(
   [1]=>'something',
   [0.10]=>'something',
   [0.3]=>'something',
   [0.2]=>'something',
   [0.1]=>'something'
);

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    试试这个:

    uksort($array, create_function('$a,$b', 'return -strnatcasecmp($a,$b);'));
    

    由于您已经使用了 uksort(用户函数定义的排序)的变体,这个版本只是通过反转比较函数的结果来反转顺序。我认为它应该适合你。

    或者试试这个:

    uksort($array, 'strnatcasecmp');
    $array = array_reverse($array, true);
    

    注意true 参数,它会保留您的密钥。

    更新现代 PHP 版本,因为 create_function 已被弃用:

    uksort($array, function ($a, $b) { return -strnatcasecmp($a, $b); });
    

    更新 PHP 7.4 的新语法(截至撰写时尚未发布):

    uksort($array, fn($a, $b) => -strnatcasecmp($a, $b));
    

    【讨论】:

      【解决方案2】:

      我不是php程序员,但是根据

      http://www.php.net/manual/en/function.uksort.php

      您应该能够编写自己的回调函数进行比较,然后根据需要对它们进行排序。

      【讨论】:

        【解决方案3】:

        asort()会按key排序,arsort()会按key排序并颠倒顺序。

        【讨论】:

          【解决方案4】:

          对于 PHP 4+,你可以使用krsort:

          krsort($array, SORT_NATURAL | SORT_FLAG_CASE);
          

          对我来说看起来更简单,它的工作原理与strnatcasecmp() 相同。如果您不希望它区分大小写,请去掉 SORT_FLAG_CASE 标志。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-21
            • 1970-01-01
            • 2013-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-10
            • 1970-01-01
            相关资源
            最近更新 更多