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 に答える