1

これは簡単なことだとわかっていますが、わかりません。私がネットで見つけたすべての答えは... 私には複雑すぎたのかもしれません。

これが私の典型的な配列です:

array(
(int) 0 => array(
    'Conversation' => array(
        'id' => '1',
        'created' => '2012-08-04 00:00:00'
    ),
    'ConversationUser' => array(
        (int) 0 => array(
            'id' => '1'
        ),
        (int) 1 => array(
            'id' => '2'
        )
    )
),
(int) 1 => array(
    'Conversation' => array(
        'id' => '2',
        'created' => '2012-08-01 00:00:00'
    ),
    'ConversationUser' => array(
        (int) 0 => array(
            'id' => '1'
        ),
        (int) 1 => array(
            'id' => '2'
        )
    )
));

['Conversation']['created'] 日付、asc、または desc でデータを並べ替えたいです。

簡単な答えはありますか?:P

PS MYSQL ソートは使用できません。データを 1 つずつ取得して、その配列を作成します。

4

4 に答える 4

3

usort()を使用します。

usort($your_array, function($a, $b){
    $a = strtotime($a['Conversation']['created']);
    $b = strtotime($b['Conversation']['created']);

    if ($a == $b) {
        return 0;
    }
    return ($a > $b) ? -1 : 1;
});
于 2012-08-05T17:59:50.660 に答える
2

これを行うには、array_multisortを使用できます。

// $data is your array from the example
// first obtain the rows for sorting
$sortkeys = array();
foreach ($data as $row) {
    $sortkeys[] = $row['Conversation']['created'];
}

// sort $data according to $sortkeys
array_multisort($sortkeys, $data);
var_dump($data);
于 2012-08-05T17:59:55.213 に答える
1

配列のソート方法をカスタマイズできるuksort()およびusort()関数を確認する必要があります。

解決策が単純であるか複雑であるかに関係なく、アインシュタインがかつて言ったことを思い出してください

これらの機能に問題がある場合は、さらなる手がかりを提供できます ;-)

于 2012-08-05T17:59:24.840 に答える
0

usort()(または、インデックスの関連付けを維持するには、 を使用できますuasort()。例: (配列が であると仮定します$arr):

usort($arr, function($a, $b) {
    return
    preg_replace('/\D/', '', $b['Conversation']['created'])
    >
    preg_replace('/\D/', '', $a['Conversation']['created']);
});

それは降順でソートされます。昇順のに変更>します。<

于 2012-08-05T18:01:08.057 に答える