1

你好我想按日期对我的对象数组进行排序,就像这样:

$array = array( 
[0] = array ('date' => '2012-05-15', 'name' => 'jon')
[1] = array ('date' => '2012-05-10', 'name' => 'jon')
[2] = array ('date' => '2012-05-09', 'name' => 'jon')
[3] = array ('date' => '2012-05-16', 'name' => 'jon')
);

我能以某种方式做到这一点吗?我必须使用什么方法?谢谢。

4

4 回答 4

2

您可以使用usort()一些自定义逻辑来完成此操作:

$array = array(
    array('date' => '2012-05-15', 'name' => 'jon'),
    array('date' => '2012-05-10', 'name' => 'jon'),
    array('date' => '2012-05-09', 'name' => 'jon'),
    array('date' => '2012-05-16', 'name' => 'jon')
);

function mySorter( $a, $b ) {
  if ( $a['date'] < $b['date'] ) return -1;
  if ( $a['date'] > $b['date'] ) return 1;
  return 0;
}

usort( $array, mySorter );

当一切都说完了,$array现在看起来像这样:

大批
(
    [0] => 数组
        (
            [日期] => 2012-05-09
            [名称] => 乔恩
        )
    [1] => 数组
        (
            [日期] => 2012-05-10
            [名称] => 乔恩
        )
    [2] => 数组
        (
            [日期] => 2012-05-15
            [名称] => 乔恩
        )
    [3] => 数组
        (
            [日期] => 2012-05-16
            [名称] => 乔恩
        )
)
于 2012-04-25T05:24:41.560 回答
1

uasort()是另一种选择。

$array = array( 
array ('date' => '2012-05-15', 'name' => 'jon'),
array ('date' => '2012-05-10', 'name' => 'jon'),
array ('date' => '2012-05-09', 'name' => 'jon'),
array ('date' => '2012-05-16', 'name' => 'jon')
);

function date_sort($a, $b)
{
    if ( $a['date'] < $b['date'] ) return -1;
    if ( $a['date'] > $b['date'] ) return 1;
    return 0;
}

uasort($array, 'date_sort');
var_dump($array);
于 2012-04-25T05:27:07.730 回答
1

显然,usort是答案。但是,如果要指定排序标准(按日期排序或按名称排序),可以执行以下操作:

<?php
$sortOrder = 'date'; // default is to sort by date
$array = array( 
[0] = array ('date' => '2012-05-15', 'name' => 'jon')
[1] = array ('date' => '2012-05-10', 'name' => 'jon')
[2] = array ('date' => '2012-05-09', 'name' => 'jon')
[3] = array ('date' => '2012-05-16', 'name' => 'jon')
);

function date_sort($a, $b)
{
    global $sortOrder;

    if( $sortOrder == 'date' ) {
        if ( strtotime( $a['date'] ) < strtotime( $b['date'] ) ) return -1;
        if ( strtotime( $a['date'] ) > strtotime( $b['date'] ) ) return 1;
        return 0;
    } else if( $sortOrder == 'name' ) {
        return strcmp( $a['name'], $b['name'] );
    }
}

// sorted by date
uasort($array, 'mysort');


// sorted by name
$sortOrder = 'name';
uasort($array, 'mysort');
?>

希望这可以帮助。

于 2012-04-25T06:00:39.263 回答
0
$array = array(
array ('date' => '2012-05-15', 'name' => 'jon'), 
array ('date' => '2012-05-10', 'name' => 'jon'),
array ('date' => '2012-05-09', 'name' => 'jon'),
array ('date' => '2012-05-16', 'name' => 'jon')

);

sort($array);

echo '<pre>';
print_r($array);
echo '</pre>';

使用已有的方法。

于 2012-04-25T05:36:18.457 回答