2009-11-25 100 views
2

我有這樣的一個數組在PHP中排序多維數組?

array(5) { 
    [0]=> 
    array(5) { 
    [0]=> 
    string(7) "jannala" 
    [1]=> 
    string(10) "2009-11-16" 
    [2]=> 
    string(29) " 
      <p>Jotain mukavaa.</p> 
     " 
    [3]=> 
    int(12) 
    [4]=> 
    int(1270929600) 
    } 
    [1]=> 
    array(5) { 
    [0]=> 
    string(7) "jannala" 
    [1]=> 
    string(10) "2009-11-16" 
    [2]=> 
    string(51) " 
      <p>Saapumiserä II/09 astuu palvelukseen</p> 
     " 
    [3]=> 
    int(11) 
    [4]=> 
    int(1270929600) 
    } 
    ... 
} 

我需要做的是基於磁盤陣列的[X] [4](Unix時間戳值)數組排序。我將如何實現這一目標?

+0

**請解決這個鏈接的解決方案**:http://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php/14972667#14972667 –

回答

10

使用比較功能,在這種情況下,在陣列的Unix時間戳值進行比較:

function compare($x, $y) { 
if ($x[4] == $y[4]) 
return 0; 
else if ($x[4] < $y[4]) 
return -1; 
else 
return 1; 
} 

,然後用使用usort函數這樣調用它:

usort($nameOfArray, 'compare'); 

此功能將使用用戶提供的比較函數按值排序數組。如果你想排序的數組需要按照一些非平凡的標準進行排序,你應該使用這個函數。

摘自PHP: usort手冊。

0

只是我最初的想法:包裝每個嵌套數組中的對象(類的實例),這樣一旦由特定的字段排序(在這種情況下,UNIX時間戳),你可以很容易地訪問其他信息通過使用相同的對象引用。

所以你的嵌套數組數組可能會變成一個對象數組,每個對象都有一個「sort」方法。

0

我是用「比較」功能之上掙扎,但能得到this工作:(注意,這也是一降,不升,排序)

function cmp($a, $b) 
{ 
    if ($a['4'] == $b['4']) { 
     return 0; 
    } 
    return ($a['4'] > $b['4']) ? -1 : 1; 
} 

usort($array, "cmp");