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排序,我一一检索数据并创建该数组。

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 回答