按键排序数组并反转结果

时间:2012-10-09 17:06:50

标签: php arrays sorting

我有一个这样的数组:

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

现在我想按键排序这个数组,所以我正在使用这段代码:

uksort($array, 'strnatcasecmp');

上面的代码工作正常,但唯一的问题是我想要反转结果。 为此,我在krsort之后使用了array_reversersortuksort,但所有这些都改变了uksort的结果。

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

我想要的应该是:

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

4 个答案:

答案 0 :(得分:9)

试试这个:

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));

答案 1 :(得分:0)

我不是php程序员,但根据

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

你应该能够编写自己的回调函数进行比较,然后按照你想要的方式对它们进行排序。

答案 2 :(得分:0)

asort()将按键排序,arsort()将按键排序并反转订单。

答案 3 :(得分:0)

对于PHP 4+,您可以使用krsort

krsort($array, SORT_NATURAL | SORT_FLAG_CASE);

对我来说看起来更简单,它的作用与strnatcasecmp()相同。如果您不希望它区分大小写,请删除SORT_FLAG_CASE标记。