在PHP中对多维数组进行排序?

时间:2009-11-25 07:32:28

标签: php arrays sorting multidimensional-array

我有这种数组

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时间戳值)对数组进行排序。我怎么做到这一点?

3 个答案:

答案 0 :(得分: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手册。

答案 1 :(得分:0)

我最初的想法是:将每个嵌套数组包装在一个对象(类的实例)中,这样一旦按特定字段排序(在本例中为unix时间戳),就可以轻松访问其他信息使用相同的对象引用。

因此,嵌套的数组数组可能会成为一个对象数组,每个对象都有一个“排序”方法。

答案 2 :(得分:0)

我正在努力使用上面的“比较”功能,但能够让this工作:

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

usort($array, "cmp");

(请注意,这也是降序,而不是升序排序。)

相关问题