2012-03-21 85 views
-1

我想排序數組。自定義PHP排序?

我有一個數據數組,其中每行代表數組中的新索引。我需要按照第一個數字對它進行降序排序。

我的數組:

7[^.^]username[^.^]idnumber[^.^]State[^.^] 
13[^.^] username[^.^] idnumber[^.^] State[^.^] 
9[^.^] username[^.^] idnumber[^.^] State[^.^] 
19[^.^] username[^.^] idnumber[^.^] State[^.^] 

ksort和ASORT樣的工作,但它承認 「9」 是比 「81」 大,所以它會返回以下內容:

13[^.^] username[^.^] idnumber[^.^] State[^.^] 
19[^.^] username[^.^] idnumber[^.^] State[^.^] 
7[^.^]username[^.^]idnumber[^.^]State[^.^] 
9[^.^] username[^.^] idnumber[^.^] State[^.^] 

我知道我需要某種自定義排序,但我不知道如何。謝謝。

+1

這是一種什麼樣的PHP數組?我看到它有16張臉。你應該發佈'print_r'或'var_dump'的輸出...... – Paulpro 2012-03-21 04:59:41

+0

你可能可以用natsort逃脫:http://www.php.net/manual/en/function.natsort.php – Paulpro 2012-03-21 05:01:18

回答

1

所有PHP sort()函數可以採取sort_flags改變作爲其第二個參數。嘗試使用SORT_NUMERIC

sort($myArray, SORT_NUMERIC);

或者使用usort()自定義排序回調

+0

sort ($ myArray,SORT_NUMERIC);是完美的,但我可以讓它下降,而不是上升? – Chase 2012-03-21 12:04:27

+0

array_reverse($ array,true);可以工作,但我認爲這對大量數據來說會很慢。 – Chase 2012-03-21 12:06:59

+1

使用['rsort($ array,SORT_NUMERIC)'](http://www.php.net/manual/en/function.rsort.php):) – jmlnik 2012-03-21 12:09:29

0

PHP提供了一個名爲usort()的函數來創建用戶定義的排序。它的工作原理是創建一個比較函數,它將返回1,0或-1,具體取決於比較的兩個值以及如何定義邏輯。

這裏是從文檔的例子:

<?php 

function cmp($a, $b) 
{ 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

$a = array(3, 2, 5, 6, 1); 

usort($a, "cmp"); 

foreach ($a as $key => $value) { 
    echo "$key: $value\n"; 
} 

?> 

,其輸出:

0: 1 
1: 2 
2: 3 
3: 5 
4: 6 
1
usort($array, function ($a, $b) { return (int)$a - (int)$b; }); 

出現這種情況的工作,因爲鑄造「13 [^^]用戶名[^^] ... 「到一個int將在第一個非int字符後切斷任何東西。

儘管您應該更好地預處理您的「數組」,以將該數值分隔爲其自己的數組索引。