2009-11-25 32 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");