按键排序并反转数组

3

我有一个像这样的数组:

$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'
);
4个回答

11

试试这个:

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
对于 PHP 4+,您可以使用 krsort:
krsort($array, SORT_NATURAL | SORT_FLAG_CASE);

这对我来说看起来更简单,而且与strnatcasecmp()的工作方式相同。如果你不想让它区分大小写,就去掉SORT_FLAG_CASE标志。

0

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接