3

我有一个这样的数组:

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

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

uksort($array, 'strnatcasecmp');

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

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

我想要的应该是:

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

4 回答 4

10

试试这个:

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));
于 2012-10-09T17:14:54.017 回答
0

我不是 php 程序员,但根据

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

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

于 2012-10-09T17:15:02.303 回答
0

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

于 2012-10-09T17:23:15.837 回答
0

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

krsort($array, SORT_NATURAL | SORT_FLAG_CASE);

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

于 2016-08-16T19:59:18.487 回答