Сортировка массивов внутри массива в PHP по дате и времени


В настоящее время у меня есть проблема в PHP, где я хочу отсортировать эти сообщения по дате их создания, чтобы затем их можно было отобразить в порядке убывания. Я искал функцию PHP для этого, но мне не повезло.

Есть ли простое решение этой проблемы? Любая идея будет высоко оценена:)

array
      0 => 
        array
          'post_id' => string '1' (length=1)
          'user_id' => string '3' (length=1)
          'post' => string 'this is a post' (length=14)
          'created' => string '2012-04-05 20:11:38' (length=19)
     1 => 
        array
          'post_id' => string '2' (length=1)
          'user_id' => string '2' (length=1)
          'post' => string 'this is a post' (length=14)
          'created' => string '2012-04-05 20:11:38' (length=19)
     2 => 
        array
          'post_id' => string '3' (length=1)
          'user_id' => string '5' (length=1)
          'post' => string 'this is a post' (length=14)
          'created' => string '2012-04-05 20:11:38' (length=19)
Author: Daniel West, 2012-04-05

5 answers

Попробуйте это:

<?php
$a=array(
      0 => 
        array(
          'post_id' => '1',
          'user_id' => '3',
          'post' => 'this is a post',
          'created' => '2012-04-05 20:11:40'
          ),
     1 => 
        array(
          'post_id' => '2',
          'user_id' => '2',
          'post' => 'this is a post',
          'created' => '2012-04-05 20:11:39'
          ),
     2 => 
        array(
          'post_id' => '3',
          'user_id' => '5',
          'post' => 'this is a post',
          'created' => '2012-04-05 20:11:38'
          )
);
function cmp($a,$b){
    return strtotime($a['created'])<strtotime($b['created'])?1:-1;
};

uasort($a,'cmp');
print_r($a);
?>
 5
Author: stewe, 2012-04-05 19:44:04

Сортировка массива записей/ассоциативных массивов по указанному полю даты и времени mysql и по порядку:

    function build_sorter($key, $dir='ASC') {
        return function ($a, $b) use ($key, $dir) {
            $t1=strtotime(is_array($a)?$a[$key]:$a->$key);
            $t2=strtotime(is_array($b)?$b[$key]:$b->$key);
            if($t1==$t2) return 0;
            return (str_to_upper($dir)=='ASC'?($t1 < $t2):($t1 > $t2)) ? -1 : 1;
        };
    }


    // $sort - key or property name 
    // $dir - ASC/DESC sort order or empty
    usort($arr, build_sorter($sort, $dir));
 2
Author: falko, 2013-11-20 11:53:51

Вы можете использовать функцию usort(), которая позволяет сортировать массив на основе ваших собственных критериев.

function cmp($a, $b)
{
    if ($a['created'] == $b['created']) {
        return 0;
    }

    return ($a['created'] < $b['created']) ? 1 : -1;
}

usort($myArray, "cmp");

print_r($myArray);

Или, если вы хотите преобразовать во время:

function cmp($a, $b)
{
    if ($a['created'] == $b['created']) {
        return 0;
    }

    $aInt = strtotime($a['created']);
    $bInt = strtotime($b['created']);

    return ($aInt < $bInt) ? 1 : -1;
}
 1
Author: MrCode, 2012-04-05 19:45:49

Массив можно отсортировать с помощью пользовательской функции сортировки, например:

function cmp($a, $b) {
    if($a['created'] < $b['created']) {
        return 1;
    } else if ($a['created'] > $b['created']) {
        return -1;
    } else  {
        // The only option left is that they are equal
        return 0;
    }
}

usort($array, cmp);

Для получения дополнительной информации о usort, проверьте справочную страницу php

 1
Author: Arjan, 2012-04-05 19:47:45

Вы можете использовать strtotime() чтобы преобразовать метку времени в целое число.

 1
Author: Alex Howansky, 2015-06-14 14:19:48