我有一个这样的数组:
$array = array(
[1]=>'something',
[0.2]=>'something',
[0.1]=>'something',
[0.3]=>'something',
[0.10]=>'something'
);
现在我想按键排序这个数组,所以我正在使用这段代码:
uksort($array, 'strnatcasecmp');
上面的代码工作正常,但唯一的问题是我想要反转结果。
为此,我在krsort
之后使用了array_reverse
,rsort
,uksort
,但所有这些都改变了uksort
的结果。
那么我可以按自然顺序按键对数组进行排序并反转结果吗?
我想要的应该是:
$array = array(
[1]=>'something',
[0.10]=>'something',
[0.3]=>'something',
[0.2]=>'something',
[0.1]=>'something'
);
答案 0 :(得分:9)
试试这个:
uksort($array, create_function('$a,$b', 'return -strnatcasecmp($a,$b);'));
由于您已经使用了uksort的变体(用户函数定义的排序),因此该版本只是通过反转比较函数的结果来反转顺序。我认为它应该适合你。
或者试试这个:
uksort($array, 'strnatcasecmp');
$array = array_reverse($array, true);
请注意保留密钥的true
参数。
更新,因为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
标记。