我希望以相反的顺序自然地对数组进行排序,而不是保留键。例如,我想要这个数组:
[0] => 1-string
[1] => 2-string
[2] => 10-string
[3] => 4-srting
[4] => 3-srting
这样结束:
[0] => 10-srting
[1] => 4-string
[2] => 3-string
[3] => 2-string
[4] => 1-string
我用usort($ array,'strnatcmp')得到了它;但它并没有按相反的顺序排列。 array_reverse()之后没有帮助。
有什么想法吗?
答案 0 :(得分:5)
使用array_reverse()
的$preserveKeys
属性重置密钥,并在natcasesort()
之后反转数组。
function rnatcasesort(&$array) {
natcasesort($array);
$array = array_reverse($array, false);
}
$values = array('1-string', '2-string', '10-string', '4-string', '3-string');
rnatcasesort($values);
var_dump($values);
/*
array(5) {
[0]=>
string(9) "10-string"
[1]=>
string(8) "4-string"
[2]=>
string(8) "3-string"
[3]=>
string(8) "2-string"
[4]=>
string(8) "1-string"
}
*/
答案 1 :(得分:5)
我对“array_reverse()之后有点困惑”。因为
<?php
echo PHP_VERSION, "\n";
$x = array(
'1-string',
'2-string',
'10-string',
'4-srting',
'3-srting'
);
natsort($x);
$x = array_reverse($x, false);
print_r($x);
打印
5.3.8
Array
(
[0] => 10-string
[1] => 4-srting
[2] => 3-srting
[3] => 2-string
[4] => 1-string
)
在我的机器上
答案 2 :(得分:2)
将rsort()与SORT_NATURAL
标记一起使用。
rsort($array, SORT_NATURAL);
在PHP 5.4中引入了 SORT_NATURAL
。如果您使用的是较低版本,请使用array_reverse(natsort())版本。
答案 3 :(得分:0)
rsort($array)
不符合您的需要吗?
答案 4 :(得分:0)
你可以做到
<?php
$arr = array("1-string", "2-string", "10-string","4-srting", "3-srting");
function sort_reverse($a, $b){
$a = (int)$a;
$b = (int)$b;
if ($a > $b){
return -1;
}
if ($a < $b){
return 1;
}
return 0;
}
usort($arr, "sort_reverse");
var_dump($arr);
答案 5 :(得分:0)
这有效:
$array = array('1-string', '2-string', '10-string', '4-string', '3-string');
natsort($array);
$array = array_reverse($array);
print_r($array);
答案 6 :(得分:0)
使用此函数首先进行自然排序,然后使用array_reverse使其按降序排列
function natrsort($array)
{
natsort($array);
return array_reverse($array);
}
natrsort($array);