2012-03-23 42 views
5

Tôi tìm cách sắp xếp một mảng tự nhiên theo thứ tự ngược lại và không giữ phím. Ví dụ, tôi muốn mảng này:Sắp xếp tự nhiên mảng PHP theo thứ tự ngược lại và không giữ phím

[0] => 1-string 
[1] => 2-string 
[2] => 10-string 
[3] => 4-srting 
[4] => 3-srting 

Để kết thúc như thế này:

[0] => 10-srting 
[1] => 4-string 
[2] => 3-string 
[3] => 2-string 
[4] => 1-string 

Tôi đã có nó chặt chẽ với usort ($ mảng, 'strnatcmp'); nhưng nó không theo thứ tự ngược lại. array_reverse() sau không hỗ trợ.

Bất kỳ ý tưởng nào?

+0

Thứ tự tự nhiên hay không tự nhiên đó? Tôi nghĩ tự nhiên là "đếm" vì vậy nó sẽ là '1 chuỗi, 10 chuỗi, 2 chuỗi, 3 chuỗi, 4 chuỗi và không tự nhiên sẽ là '4 chuỗi, 3 chuỗi, 2 chuỗi, 10 -string, 1-string'. Tôi đã được biết đến để hiểu lầm những điều (như tôi đã kết hôn và miscommunications xảy ra 24/7), vì vậy bạn có thể cung cấp cho một lời giải thích sâu hơn, cho tôi không hiểu hệ thống đặt hàng của bạn. – Michael

+0

Tự nhiên là 1, 2, 3, 4, 10 — mà tôi có thể làm. Bây giờ tôi cần phải làm điều đó theo thứ tự ngược lại, vì vậy: 10, 4, 3, 2, 1. – Phil

Trả lời

4

Tôi là một chút bối rối về "array_reverse() sau khi không giúp đỡ." vì

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

in

5.3.8 
Array 
(
    [0] => 10-string 
    [1] => 4-srting 
    [2] => 3-srting 
    [3] => 2-string 
    [4] => 1-string 
) 

trên máy tính của tôi

+0

Bây giờ nó hoạt động! Không chắc tôi đã làm gì sai ... Cảm ơn. – Phil

0

Không phù hợp với nhu cầu của bạn?

+0

Không. Điều đó khiến tôi 4, 3, 2, 10, 1. – Phil

+0

không vì nó xử lý chúng như là chuỗi http://codepad.org/wb4cv8hO –

5

Sử dụng các thuộc tính của $preserveKeysarray_reverse() để thiết lập lại các phím cũng như đảo ngược mảng sau một 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

Bạn có thể làm

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

pad đây http://codepad.org/6dn81S3f

0

này hoạt động:

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

Sử dụng rsort() với SORT_NATURAL cờ.

rsort($array, SORT_NATURAL); 

SORT_NATURAL được giới thiệu trong PHP 5.4. Nếu bạn đang sử dụng phiên bản thấp hơn, hãy truy cập phiên bản array_reverse (natsort()).

Các vấn đề liên quan