PHP Сортируют многомерный массив по элементу, содержащему дату

У меня есть массив, такой как:

Array
(
[0] => Array
    (
        [id] => 2
        [type] => comment
        [text] => hey
        [datetime] => 2010-05-15 11:29:45
    )

[1] => Array
    (
        [id] => 3
        [type] => status
        [text] => oi
        [datetime] => 2010-05-26 15:59:53
    )

[2] => Array
    (
        [id] => 4
        [type] => status
        [text] => yeww
        [datetime] => 2010-05-26 16:04:24
    )

)

Кто-либо может предложить способ сортировать/заказывать это на основе элемента даты и времени?

107
задан Ferdinand Beyer 26 May 2010 в 06:41
поделиться

2 ответа

Используйте usort () и пользовательскую функцию сравнения:

function date_compare($a, $b)
{
    $t1 = strtotime($a['datetime']);
    $t2 = strtotime($b['datetime']);
    return $t1 - $t2;
}    
usort($array, 'date_compare');

РЕДАКТИРОВАТЬ : Ваши данные организованы в виде массива массивов. Чтобы лучше различать их, давайте назовем внутренние массивы (данные) записями, чтобы ваши данные действительно были массивом записей.

usort передаст две из этих записей в заданную функцию сравнения date_compare () за раз. date_compare затем извлекает поле «datetime» из каждой записи как метку времени UNIX (целое число) и возвращает разницу, так что результат будет 0 если обе даты равны, положительное число, если первая ( $ a ) больше, или отрицательное значение, если второй аргумент ( $ b ) больше. usort () использует эту информацию для сортировки массива.

190
ответ дан 24 November 2019 в 03:37
поделиться

http://us2.php.net/manual/en/function.array-multisort.php см. третий пример:

<?php

$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

?>

fyi, использование unix (секунды с 1970 года) или mysql timestamp (YmdHis - 20100526014500) было бы проще для парсера, но я думаю, что в вашем случае это не имеет значения.

6
ответ дан 24 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: