按子数组排序数组

时间:2012-08-02 09:32:01

标签: php arrays

我有阵列:

$array = array(array('2012-12-12', 'vvv'), array('2012-12-14', 'df'),array('2012-12-10', 'vvv'),array('2012-12-11', 'vvv'));

Array
(
    [0] => Array
        (
            [0] => 2012-12-12
            [1] => vvv
        )

    [1] => Array
        (
            [0] => 2012-12-14
            [1] => df
        )

    [2] => Array
        (
            [0] => 2012-12-10
            [1] => vvv
        )

    [3] => Array
        (
            [0] => 2012-12-11
            [1] => vvv
        )

)

http://codepad.org/gxw2yKMU

可以用日期DESC对它进行排序吗?这个例子应该是:

$array[1] //2012-12-14
$array[0] //2012-12-12
$array[3] //2012-12-11
$array[2] //2012-12-10

对我来说,最好的方法是使用PHP的嵌入式函数,但是如何? :)

3 个答案:

答案 0 :(得分:3)

您可以将usort与自定义功能配合使用。如果您使用的是PHP< 5.3你需要一个命名函数,而不是像我一样,需要一个匿名函数。

$array = array(
    array('2012-12-12', 'vvv'),
    array('2013-12-14', 'df'),
    array('2012-12-14', 'df'),
    array('2012-12-10', 'vvv'),
    array('2012-12-11', 'vvv')
);

usort($array, function($a, $b) {
    if ($a[0] == $b[0]) return 0;
    return ($a > $b) ? -1 : 1;
});
print_r($array);

答案 1 :(得分:3)

您应该可以使用usort

usort( $array, 'sortFunction' );

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

答案 2 :(得分:2)

您可以使用array_multisort()

foreach ($array as $key => $row) {
    $dates[$key] = $row[0]; 
}
array_multisort($dates, SORT_DESC, $array);

首先,您将所有日期都放在一个新数组中。然后,array_multisort()将按照与第一个数组($array

相同的顺序对第二个数组($dates)进行排序