2012-03-23 82 views
5

我期待按照相反的順序對數組進行自然排序並且不保存鍵。例如,我想這個數組:反向並不保留鍵的PHP數組的自然排序

[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($陣列, 'strnatcmp');但它不是相反的順序。 array_reverse()之後沒有幫助。

任何想法?

+0

這是自然或不自然的排序?我認爲自然是「計數」,所以它會是「單串,10串,2串,3串,4串」,非自然會是「4串3串2串10」串,1串「。我已經知道誤解了事情(因爲我已婚並且24/7全天候都會發生溝通不暢),所以您可以提供更深入的解釋,因爲我不明白您的訂購系統。 – Michael 2012-03-23 16:06:43

+0

自然是1,2,3,4,10-我可以做。我現在需要以相反的順序得到,所以:10,4,3,2,1. – Phil 2012-03-23 16:08:20

回答

4

我有點疑惑關於 「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 
) 

我的機器

+0

現在它的工作!不知道我在做什麼錯...謝謝。 – Phil 2012-03-23 16:15:59

0

不是是否符合您的需求?

+0

沒有。這讓我4,3,2,10,1. – Phil 2012-03-23 16:10:34

+0

不,因爲它把它們視爲字符串http://codepad.org/wb4cv8hO – 2012-03-23 16:10:51

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" 
} 
*/ 

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

墊這裏http://codepad.org/6dn81S3f

0

在這工作:

$array = array('1-string', '2-string', '10-string', '4-string', '3-string'); 
natsort($array); 
$array = array_reverse($array); 
print_r($array); 
2

使用rsort()SORT_NATURAL標誌。

rsort($array, SORT_NATURAL); 

SORT_NATURAL在PHP 5.4中引入。如果您的版本較低,請使用array_reverse(natsort())版本。